过于频繁调用时,PHAsset assetResourcesForAsset失败
我需要在PHAsset
检索Camera Roll中存在的所有PHAsset
的名称。 要获取文件名,我使用与PHAssetResource
关联的PHAsset
的文档originalFilename
属性。 这对于第一个资产来说工作得很好,但是在某个时候(在大约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); }
当使用未logging的方法来获取文件名,如PHImageFileURLKey
返回的info
字典的[asset valueForKey@"filenamme"]
或PHImageFileURLKey
键时,一切正常(尽pipe名称与originalFilename
不同,不可靠,因为它没有logging)。
官方的方法怎么不可靠? 有什么我做错了吗?
用这个
if (asset) { // get photo info from this asset PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init]; imageRequestOptions.synchronous = YES; [[PHImageManager defaultManager] requestImageDataForAsset:asset options:imageRequestOptions resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { NSLog(@"info = %@", info); if ([info objectForKey:@"PHImageFileURLKey"]) { NSURL *path = [info objectForKey:@"PHImageFileURLKey"]; } }]; }