我需要在短时间内单独检索相机胶卷中存在的所有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
不同,并且由于未记录,因此不可靠。
官方方法怎么会不可靠? 有什么我做错了吗?