PHAsset assetsResourcesForAsset дает сбой при слишком частом вызове

Мне нужно получить имена всех PHAsset, существующих в Фотопленке, по отдельности и за короткое время. Чтобы получить имя файла, я использую задокументированное свойство originalFilename файла PHAssetResource, связанное с файлом PHAsset. Это отлично работает для первых ассетов, но в какой-то момент (примерно после 400 ассетов) он начинает давать сбой и каждый раз возвращает nil. Вот код, который показывает это поведение (работает на iPhone 7 с ~800 фотографиями в фотопленке):

PHFetchResult *result = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum
subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary                                                                     options:nil];
PHAssetCollection *assetCollection = result.firstObject;
PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil];

for (int i = index; i<[assets count]; i++) {
    PHAsset *asset = assets[i];
    NSArray *resources = [PHAssetResource assetResourcesForAsset:asset];
    NSString *name = (resources.count > 0) ? [(PHAssetResource*)resources.firstObject originalFilename] : nil;
    NSLog(@"%i: %@", i, name);
}

При использовании недокументированных методов для получения имени файла, таких как [asset valueForKey@"filenamme"] или ключ PHImageFileURLKey словаря info, возвращаемого PHImageManager, все работает хорошо (хотя имя отличается от originalFilename, и это ненадежно, поскольку не задокументировано) .

Почему официальный метод так ненадежен? Я что-то делаю не так?


person ink    schedule 20.01.2017    source источник
comment
Используйте PHImageManager для получения объекта UIImage из PHAsset   -  person Krishna Datt Shukla    schedule 20.01.2017
comment
@KrishnaDattShukla Мне нужно имя файла, как я могу получить его из UIImage? (кроме использования недокументированного PHImageFileURLKey)   -  person ink    schedule 20.01.2017
comment
Вы можете получить все от PHAsset, используя код, который я только что добавил в свой ответ.   -  person Krishna Datt Shukla    schedule 20.01.2017
comment
@KrishnaDattShukla не нашел здесь ответа, не могли бы вы указать!? Вы имели в виду свой комментарий!?   -  person Erfan    schedule 19.09.2017
comment
см. это - stackoverflow.com/a/41761879/5172413   -  person Krishna Datt Shukla    schedule 20.09.2017