2017-03-07 15 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

해결책을 찾았습니까? 해결 방법 :

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() 
      } 
     } 
    } 

} 

희망이 당신을 도울!