मैं इस तरह कई फोटो संग्रह को पुनः प्राप्त करने PHPhotoLibrary
उपयोग कर रहा हूँ:PHChange changeDetailsForFetchResult - हमेशा रिटर्न
_smartAlbumsFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream options:nil];
[_smartAlbumsFetchResult enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop) {
[self analyzeCollectionInternal:collection];
}];
_userAlbumsFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:userAlbumsOptions];
[_userAlbumsFetchResult enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop) {
[self analyzeCollectionInternal:collection];
}];
विधि analyzeCollectionInternal
बाद में उपयोग के PHAssetCollections
की बचत होती है और संग्रह की सामग्री को प्रदर्शित करता है।
[[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
वर्ग कि पर्यवेक्षक के रूप में कार्य इस तरह PHPhotoLibraryChangeObserver
प्रोटोकॉल लागू करता है::
- (void)photoLibraryDidChange:(PHChange *)changeInstance {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"PicturesDataSource - photoLibraryDidChange");
NSMutableArray *collectionsToAnalyze = [NSMutableArray new];
NSMutableArray *collectionsToDelete = [NSMutableArray new];
if (_smartAlbumsFetchResult) {
PHFetchResultChangeDetails *smartAlbumChanges = [changeInstance changeDetailsForFetchResult:_smartAlbumsFetchResult];
NSLog(@"PictureDataSource - changeDetailsForFetchResult(_smartAlbumsFetchResult): %@", smartAlbumChanges);
if (smartAlbumChanges) {
_smartAlbumsFetchResult = [smartAlbumChanges fetchResultAfterChanges];
[collectionsToAnalyze addObjectsFromArray:smartAlbumChanges.insertedObjects];
[collectionsToAnalyze addObjectsFromArray:smartAlbumChanges.changedObjects];
[collectionsToDelete addObjectsFromArray:smartAlbumChanges.removedObjects];
}
}
if (_userAlbumsFetchResult) {
PHFetchResultChangeDetails *userAlbumChanges = [changeInstance changeDetailsForFetchResult:_userAlbumsFetchResult];
NSLog(@"PictureDataSource - changeDetailsForFetchResult(_userAlbumsFetchResult): %@", userAlbumChanges);
if (userAlbumChanges) {
_userAlbumsFetchResult = [userAlbumChanges fetchResultAfterChanges];
[collectionsToAnalyze addObjectsFromArray:userAlbumChanges.insertedObjects];
[collectionsToAnalyze addObjectsFromArray:userAlbumChanges.changedObjects];
[collectionsToDelete addObjectsFromArray:userAlbumChanges.removedObjects];
}
}
for (PHAssetCollection *collectionToAnalyze in collectionsToAnalyze) {
[self analyzeCollection:collectionToAnalyze];
}
for (PHAssetCollection *collectionToDelete in collectionsToDelete) {
[self deleteCollection:collectionToDelete];
}
});
}
- (void)analyzeCollectionInternal:(PHAssetCollection *)collection {
NSLog(@"Album Title %@", collection.localizedTitle);
if (![_collections containsObject:collection]) {
[_collections addObject:collection];
}
[...]
}
साथ ही मैं इस तरह फ़ोटो लाइब्रेरी में एक परिवर्तन पर्यवेक्षक पंजीकृत
एन ow अगर मैं फ़ोटो एप्लिकेशन खोलें जोड़ें/बदलें/तस्वीरें "सभी तस्वीरें" -SmartAlbum, बदलें-ऑब्जर्वर कहा जाता हो जाता है, लेकिन
[changeInstance changeDetailsForFetchResult:_smartAlbumsFetchResult]
केवल रिटर्न nil
की कॉल से, हटाएँ भी PHChange वस्तु अगर इसमें insertedObjectIDs
और changedObjectIDs
शामिल हैं। IDevice के होम- और लॉक-बटन का उपयोग करके स्क्रीनशॉट लेने पर भी वही लागू होता है।
थोड़ी देर हो चुकी है, लेकिन आपने गैर-शून्य विकल्पों के साथ [want tocrecrealChangeDetails = YES के साथ [PHAssetCollection fetchAssetCollectionsWithType: ...] को कॉल करने का प्रयास किया है? – Ivan