我有一个超过1000条记录的CloudKit数据库(图像资产中的image.jpg~1.0 MB)
我应该在CollectionViewCell中加载Image吗?
我的代码是:
func loadData(){
self.loading.startAnimating()
let query = CKQuery(recordType: self.recordType, predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "productID", ascending: true)]
operation.query = query
operation.resultsLimit = 1000
operation.qualityOfService = .userInteractive
operation.recordFetchedBlock = { (record) in
self.items.append(record)
DispatchQueue.main.async {
self.collectionView.reloadData()
}
}
operation.queryCompletionBlock = { (queryCursor, error) in
DispatchQueue.main.async {
self.loading.stopAnimating()
}
}
myData.add(operation)
}
我的CollectionViewCell:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "productCell", for: indexPath)
let img = UIImageView(frame: CGRect(x: 1, y: 1, width: w - 2, height: h - 2))
img.contentMode = .scaleAspectFill
img.image = UIImage(contentsOfFile: (self.items[indexPath.item]["productImage"] as! CKAsset).fileURL.path)
cell.contentView.addSubview(img)
return cell
}
答案 0 :(得分:2)
每次用户在UICollectionView上滚动时,您应该获取一个小集,而不是一次获取1000条记录。
通过这种方式,您可以获得更好的性能并仅恢复您需要的图像。
要执行此操作,您必须将resultsLimit
属性设置为适合显示CollectionView加5或6的图像数量的数字
每次用户到达CollectionView的末尾时,您都应该执行另一次提取,并将CKQueryCursor作为参数传递。