Не уверен, что именно я делаю неправильно здесь. Я перечислил, в чем моя проблема и мой код. Хотелось бы получить помощь.
Спасибо!
Проблема:
- VC1 представляет VC2.
- IBOutlets из VC1 теперь равны нулю.
- VC2 уходит обратно в VC1.
- IBOutlets в VC1 по-прежнему равны нулю.
VC1 загружает сетку изображений из flickR. VC2 имеет контроллер searchBar, когда VC2 закрывается, он запускает запрос flickR. Прямо перед тем, как мой self.collectionView.reload() выйдет из строя, потому что self.collectionView равен нулю :(
VC1
import UIKit
class MainViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet var collectionView: UICollectionView!
@IBOutlet var searchMask: UIView!
let api_key = "f87357398a52b80e0c9f76bf94c8ee94"
var flickResults:NSMutableArray! = NSMutableArray()
var titleResults:NSMutableArray! = NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
loadPhotos("Brasil")
// Do any additional setup after loading the view.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
}
func loadPhotos(searchString: String) {
let flickr:FlickrHelper = FlickrHelper()
println("Collection: \(self.collectionView)")
flickr.request(searchString, per_page: 50, completion: { (searchStr, flickrPhotos, photoTitle) -> () in
dispatch_async(dispatch_get_main_queue(), {
self.flickResults = flickrPhotos
self.titleResults = photoTitle
self.collectionView.reloadData()
})
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell: PhotoCell = self.collectionView.dequeueReusableCellWithReuseIdentifier("photoCell", forIndexPath: indexPath) as PhotoCell
cell.photoImageView.alpha = 0
let queue:dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue, {
let searchURL: String = self.flickResults.objectAtIndex(indexPath.item) as String
let title: String = self.titleResults.objectAtIndex(indexPath.item) as String
let image: UIImage = self.loadImage(searchURL)
dispatch_async(dispatch_get_main_queue(), {
UIView.animateWithDuration(0.5, animations: {
cell.photoImageView.image = image
cell.photoTitle.text = title.capitalizedString
cell.photoImageView.alpha = 1
})
})
})
insertBlurView(cell.titleMask, UIBlurEffectStyle.Dark)
return cell
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.flickResults.count
}
func loadImage(imageUrl: String) -> UIImage{
let url = NSURL(string: imageUrl)
let data = NSData(contentsOfURL: url!)
let image = UIImage(data: data!)
return image!
}
@IBAction func searchButtonPressed(sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil);
let vc: SearchViewController = storyboard.instantiateViewControllerWithIdentifier("Search") as SearchViewController
providesPresentationContextTransitionStyle = true
definesPresentationContext = true
vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
self.presentViewController(vc, animated: false, completion: nil)
}
}
VC2
import UIKit
class SearchViewController: UIViewController, UITextFieldDelegate, UISearchBarDelegate, UICollectionViewDelegate {
@IBOutlet var searchMask: UIView!
@IBOutlet var searchField: UITextField!
@IBOutlet var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
insertBlurView(self.searchMask, UIBlurEffectStyle.Dark)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func exitTap(sender: UIButton) {
self.dismissViewControllerAnimated(true, completion: nil)
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
self.dismissViewControllerAnimated(true, completion: {
let mainvc = self.storyboard?.instantiateViewControllerWithIdentifier("Main") as MainViewController
mainvc.loadPhotos(searchBar.text)
})
}
}