2016-11-28 44 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。請給你進一步的建議來解決這個問題 –

相關問題