2017-03-07 64 views
2

我有以下代碼多次調用。PHPhotoLibrary photoLibraryDidChange斯威夫特

我的問題是,如果設備畫廊中的某些內容發生更改,方法photoLibraryDidChange會被多次調用。
下面是這個函數的代碼:

func photoLibraryDidChange(_ changeInstance: PHChange) { 
    DispatchQueue.main.async(execute: { 
     self.updateFetchResult(); 
    }) 
} 

你知道爲什麼這個方法被執行multiple次?

+0

您是否找到解決方案?我剛剛實現了'PHPhotoLibraryChangeObserver'協議,並在查看我的'UICollectionView'時通過截圖進行測試。我注意到,當我拍攝屏幕截圖時,會調用photoLibraryDidChange(_ changeInstance:PHChange)兩次。 –

+0

也在尋找答案。在我的代碼中,photoLibraryDidChange被調用了大約3次。但大多數時候只是沒有實際的變化 –

回答

0

您是否找到解決方案? 這解決了mi問題:

首先,保存你的PHFetResult<PHAsset>如果你使用這個方法調用PHAsset.fetchAssets(with:options:)

之後,使用您的PHFetResult<PHAsset>變量驗證提取結果是否在photoLibraryDidChange:方法中發生了變化。第一次調用此方法時,必須更新到集合視圖或表視圖。之後,你的提取結果沒有改變,所以你沒有什麼可更新的。

這是我的全碼:

let fetchOptions = PHFetchOptions() 
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 

self.fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions) 

. 
. 
. 

extension YourViewController: PHPhotoLibraryChangeObserver { 

    func photoLibraryDidChange(_ changeInstance: PHChange) { 
     if let _fetchResult = self.fetchResult, let _ = changeInstance.changeDetails(for: _fetchResult) { 
      DispatchQueue.main.async { 
       self.getPhotos() 
      } 
     } 
    } 

} 

希望這有助於你!