2017-03-07 16 views
2

で複数回呼び出さ。PHPhotoLibrary photoLibraryDidChangeは、私は次のコードを持っているスウィフト

私の問題は、photoLibraryDidChangeというメソッドは、デバイスのギャラリー内の何かが変更された場合に複数回呼び出されるということです。ここ
は、その関数のコードです:このメソッドはmultiple回実行されますなぜ

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

あなたは知っていますか?

+0

解決策を見つけましたか?私は 'PHPhotoLibraryChangeObserver'プロトコルを実装し、' UICollectionView'を見ながらスクリーンショットを撮ってテストしました。スクリーンショットを撮ると、 'photoLibraryDidChange(_ changeInstance:PHChange)'が2回呼び出されることに気付きました。 –

+0

もその答えを探しています。私のコードでは、photoLibraryDidChangeが約3回呼び出されます。しかし、実際の変更がないほとんどの時間 –

答えて

0

ソリューションを見つけましたか? これは解決方法です。

最初に、PHAsset.fetchAssets(with:options:)をこのメソッドを使用する場合はPHFetResult<PHAsset>に保存してください。

その後、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() 
      } 
     } 
    } 

} 

はあなた、このヘルプを願っています!

関連する問題