2016-11-28 76 views
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() 

} 

回答

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: { _ in 
    self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 
    dispatch_async(dispatch_get_main_queue(), { self.collectionView.reloadData() }) 
    }) 
+0

我已根据您的建议尝试过,但不起作用。我面临同样的问题,我在我的问题中已经解释过。如果您再给我更多的建议,我将不胜感激。谢谢。 –

+0

好的。它可能没有更新,因为一个或两个集合视图数据源方法不是动态的。你可以在完成处理程序中添加self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection,options:nil),后面跟着self.collectionView.reloadData(),并告诉我它是否已经改进。我已经用这个想法更新了我的解决方案。 – gwinyai

+0

它可以工作,但需要很长时间才能删除和更新收集视图约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。请给你进一步的建议来解决这个问题 –

相关问题