ソリューションを見つけましたか? これは解決方法です。
最初に、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()
}
}
}
}
はあなた、このヘルプを願っています!
解決策を見つけましたか?私は 'PHPhotoLibraryChangeObserver'プロトコルを実装し、' UICollectionView'を見ながらスクリーンショットを撮ってテストしました。スクリーンショットを撮ると、 'photoLibraryDidChange(_ changeInstance:PHChange)'が2回呼び出されることに気付きました。 –
もその答えを探しています。私のコードでは、photoLibraryDidChangeが約3回呼び出されます。しかし、実際の変更がないほとんどの時間 –