0
我已经为我的应用使用了照片的集合视图。 我很容易从集合视图中删除项目,但它不会立即从集合视图中删除项目。如果我转到另一个视图控制器并返回到集合视图控制器,那么它会更新并从集合视图中删除已删除的项目。我希望收集视图在发生删除操作时立即更新。我怎么解决这个问题?提前致谢。 低于我的SWIFT代码给出:从UICollectionView中删除项目后更新/重新加载收藏视图
import UIKit
import Photos
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate{
var assetCollection: PHAssetCollection = PHAssetCollection()
var photosAsset: PHFetchResult!
var assetThumbnailSize:CGSize!
var selectedIndexPath = [NSIndexPath]()
@IBAction func deleteButton(sender: UIButton) {
if selectedIndexPath.count != 0{
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
//Delete Photo
if let request = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection){
for a in self.selectedIndexPath{
request.removeAssets([self.photosAsset[a.item]])
}
}
}, completionHandler: nil)}
self.collectionView.reloadData()
}
这里是我的viewWillAppear中的方法:
override func viewWillAppear(animated: Bool) {
// Get size of the collectionView cell for thumbnail image
if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout{
let cellSize = layout.itemSize
self.assetThumbnailSize = CGSizeMake(cellSize.width, cellSize.height)
}
self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
if let photoCnt = self.photosAsset?.count{
if(photoCnt == 0){
self.noPhotosLabel.hidden = false
}else{
self.noPhotosLabel.hidden = true
}
}
self.collectionView.reloadData()
}
我已根据您的建议尝试过,但不起作用。我面临同样的问题,我在我的问题中已经解释过。如果您再给我更多的建议,我将不胜感激。谢谢。 –
好的。它可能没有更新,因为一个或两个集合视图数据源方法不是动态的。你可以在完成处理程序中添加self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection,options:nil),后面跟着self.collectionView.reloadData(),并告诉我它是否已经改进。我已经用这个想法更新了我的解决方案。 – gwinyai
它可以工作,但需要很长时间才能删除和更新收集视图约10-15秒。它表明类似警告“该应用程序正在修改从后台线程,这可能会导致发动机损坏和怪异崩溃的自动布局引擎,这将导致异常在将来的版本”,也表明这个“0的CoreFoundation 0x24d7b933 + 150 \t 1 libobjc.A.dylib 0x24516e17 objc_exception_throw + 38 \t 2 CoreFoundation 0x24d7b861 + 0 \t 3 Foundation 0x2566d3e7 + 170“type。请给你进一步的建议来解决这个问题 –