// MARK: - Reload Photos
@IBAction func reloadCollectionView(sender: AnyObject) {
var photosArray = annotation!.photos!
if selecting {
// Delete the photos from the photos array
for path in selectedIndexPaths {
print("selected path: \(path.row)")
// Using inverse relationship to delete elements of array
photosArray[path.row].customAnnotation = nil
}
print(photosArray.count)
collectionView?.performBatchUpdates({ () -> Void in
self.collectionView?.deleteItemsAtIndexPaths(self.selectedIndexPaths)
}, completion: nil)
selectedIndexPaths.removeAll()
}
}
// MARK: UICollectionViewDataSource
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print(annotation?.photos!.count)
return (annotation?.photos!.count)!
}
上面是一个按钮的简单实现,如果该元素的索引在photosArray
数组中,则将selectedIndexPaths
的元素设置为nil,然后删除所选的UICollectionViewCells
通过DataSource
。
当我运行程序并说例如,我从21中选择了3 UICollectionViewCells
,因此被添加到我的selectedIndexPaths
数组中。然后我按reloadCollectionView
按钮print(photosArray.count)
将返回21
,但随后在collectionView:numberOfItemsInSection
,print(annotation?.photos!.count)
神奇地返回18
我在操场上测试过,我知道nil
仍然算作阵列中的一个元素,所以我对发生的事情感到有些困惑。 DataSource
在后台有什么东西可以自动删除nil
个元素吗?我很困惑,是否有人愿意为我阐明这一点?