Я пытаюсь загрузить набор изображений с Parse.com в UICollectionView. Все работает, кроме функции reloadData(). В приложении я могу нажать кнопку «Назад» и снова ввести UICollectionView, и все изображения есть. Я просто не знаю, что я делаю неправильно с функцией reloadData().Почему reloadData() не работает в моем приложении?
var images = [UIImage]()
var imageFiles = [PFFile]()
class CollectionCollectionViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBAction func xy1Button(sender: AnyObject) {
}
@IBAction func xy2Button(sender: AnyObject) {
var downloadImages = PFQuery(className: "XY2")
downloadImages.whereKey("Expansion", equalTo: "XY2")
downloadImages.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
println("Successfully retrieved \(objects!.count) cards.")
if let objects = objects as? [PFObject] {
for object in objects {
imageFiles.append(object["Image"] as! PFFile)
dispatch_async(dispatch_get_main_queue() ^{
self.collectionView.reloadData()
});
//ERROR BREAKPOINT HERE:'Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)'
}
}
} else {
println("Error: \(error!) \(error!.userInfo!)")
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return imageFiles.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell: CardsCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CardsCollectionViewCell
//cell.cardsImg.image = UIImage(named: cards[indexPath.row] as String)
//return cell
imageFiles[indexPath.row].getDataInBackgroundWithBlock{
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.cardsImg.image = image
}
}
return cell
}
}
Где вы определяете 'self.collectionView'? – idmean
Запустите его в main_queue, как говорит сахара. Это не всегда очень интуитивно, но обычно, когда изменения пользовательского интерфейса не обновляются или не требуют много времени для обновления, попробуйте запустить код в главной очереди. – boidkan
. Кажется, имеют выход к 'collectionView', и поэтому такого свойства' self.collectionView' не существует. Вам не нужен один из функций делегата, которые вы определили, поскольку он передается как параметр, но вы вызываете reloadData(). – Grimxn