Ich verwende PHPhotoLibrary
, um Bilder für das Album meiner Anwendung in iPhone zu speichern und abzurufen.In PHPhotoLibrary benachrichtigt photoLibraryDidChange nicht alle Updates
Wenn mein Album viele Bilder hat (etwa 5000 Standbilder), meine Anwendung 10 Bilder aus dem Netzwerk herunterladen, dann auf Camera Roll speichern und zum Album meiner Anwendung hinzufügen.
Zur gleichen Zeit, die Anwendung beobachten photoLibraryDidChange
Rückruf, um die hinzugefügten Bilder zu kennen, aber es benachrichtigen nur 5 eingefügte Bilder.
Ich beende meine Bewerbung, indem ich die HOME-Taste drücke und die Kamera-Rolle und mein Album in der Foto-App überprüfe. Es sind korrekt 5010 Bilder vorhanden.
Vielleicht meldet photoLibraryDidChagne
nicht alle Änderungen?
Mein Code ist wie folgt.
- (void)photoLibraryDidChange:(PHChange *)changeInstance
{
// dispatch main queue
dispatch_async(dispatch_get_main_queue(), ^{
[self handleChangedLibrary:changeInstance];
});
}
- (void)handleChangedLibrary:(PHChange *)changeInstance
{
PHFetchResultChangeDetails *fetchResultChangeDetails = [changeInstance changeDetailsForFetchResult:_assetsFetchResult];
if (!fetchResultChangeDetails) {
NSLog(@"### No change in fetchResultChangeDetails ###");
return;
}
if (![fetchResultChangeDetails hasIncrementalChanges]) {
[self fetchAllAssets];
return;
}
NSArray *insertedObjects = [fetchResultChangeDetails insertedObjects];
if (insertedObjects) {
for (PHAsset *asset in insertedObjects) {
if (asset.mediaType == PHAssetMediaTypeImage) {
NSLog(@"asset=%@", asset);
[_stillImageAssetArray addObject:asset];
}
}
}
self.assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:_assetCollection options:nil];
}
Ich überprüfte Asset von NSLog und Debugger eingefügt und es aktualisiert wirklich 5 Bilder.
Es gibt keine Benachrichtigung für die anderen 5 Bilder.