I have a CollectionView
which displays images to the user. I download these in the background, and when the download is complete I call the following func to update the collectionViewCell
and display the image.
func handlePhotoDownloadCompletion(notification : NSNotification) {
let userInfo:Dictionary<String,String!> = notification.userInfo as! Dictionary<String,String!>
let id = userInfo["id"]
let index = users_cities.indexOf({$0.id == id})
if index != nil {
let indexPath = NSIndexPath(forRow: index!, inSection: 0)
let cell = followedCollectionView.cellForItemAtIndexPath(indexPath) as! FeaturedCitiesCollectionViewCell
if (users_cities[index!].image != nil) {
cell.backgroundImageView.image = users_cities[index!].image!
}
}
}
This works great if the cell is currently visible on screen, however if it is not I get a
fatal error: unexpectedly found nil while unwrapping an Optional value
error on the following line :
let cell = followedCollectionView.cellForItemAtIndexPath(indexPath) as! FeaturedCitiesCollectionViewCell
Now this function does not even need to be called if the collectionViewCell is not yet visible, because in this case the image will be set in the cellForItemAtIndexPath
method anyway.
Hence my question, how can I alter this function to check whether the cell we are dealing with is currently visible or not. I know of the collectionView.visibleCells()
however, I am not sure how to apply it here.
Get current available cells
// get visible cells
let visibleIndexPaths = followedCollectionView.indexPathsForVisibleItems
Then check if your indexPath
is contained in the visibleIndexPaths
array or not, before doing anything with cells.