PHAsset assetResourcesForAsset在过于频繁调用时失败

时间:2017-01-20 09:41:46

标签: ios objective-c iphone phasset

我需要在短时间内单独检索相机胶卷中存在的所有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字典的infoPHImageManager键,一切正常(尽管该名称与originalFilename不同,并且由于未记录,因此不可靠。

官方方法怎么会不可靠? 有什么我做错了吗?

0 个答案:

没有答案