Я загружаю табличное представление изображений, которые извлекаются из общедоступной базы данных CloudKit как CKAssets. Однако изображения не работают порядка двух секунд, пока правильное изображение не будет загружено в UIImageView пользовательской ячейки UITableview. Я знаю, что проблема заключается в том, что, поскольку ячейка повторно используется, изображение по-прежнему загружается из CloudKit и отображается в любой видимой ячейке, пока пользователь прокручивает TableView до того, как на изображении будет показано правильное изображение. Мне интересно, есть ли исправление для этого в быстром, чтобы загруженное изображение было только для видимой ячейки, а не любых предыдущих ячеек.Изображения от CKAsset Load Out of Order in Swift
Вот код для cellForRowAtIndexPath:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! PostsTableViewCell
cell.userInteractionEnabled = false
photoRecord = sharedRecords.fetchedRecords[indexPath.row]
cell.photoTitle.text = photoRecord.objectForKey("photoTitle") as? String
cell.photoImage.backgroundColor = UIColor.blackColor()
cell.photoImage.image = UIImage(named: "stock_image.png")
if let imageFileURL = imageCache.objectForKey(self.photoRecord.recordID) as? NSURL {
cell.photoImage.image = UIImage(data: NSData(contentsOfURL: imageFileURL)!)
cell.userInteractionEnabled = true
print("Image Cached: \(indexPath.row)")
} else {
let container = CKContainer.defaultContainer()
let publicDatabase = container.publicCloudDatabase
let fetchRecordsImageOperation = CKFetchRecordsOperation(recordIDs:[self.photoRecord.recordID])
fetchRecordsImageOperation.desiredKeys = ["photoImage"]
fetchRecordsImageOperation.queuePriority = .VeryHigh
fetchRecordsImageOperation.perRecordCompletionBlock = {(record:CKRecord?, recordID:CKRecordID?, error:NSError?) -> Void in
if let imageRecord = record {
NSOperationQueue.mainQueue().addOperationWithBlock() {
if let imageAsset = imageRecord.objectForKey("photoImage") as? CKAsset{
cell.photoImage.image = UIImage(data: NSData(contentsOfURL: imageAsset.fileURL)!)
self.imageCache.setObject(imageAsset.fileURL, forKey:self.photoRecord.recordID)
cell.userInteractionEnabled = true
}
}
}
}
publicDatabase.addOperation(fetchRecordsImageOperation)
}
return cell
}
Заранее спасибо!
Это именно то, что мне нужно! Я думал, что это проблема, но я не был уверен, где реализовать решение в cellForRowAtIndexPath. Еще раз спасибо! –