我正在使用 aUIImagePickerController
让用户选择要在应用程序中共享的照片或视频。当用户在他们的库中选择一个媒体项目时,我在其中一个UIImagePickerController's
委托方法中执行此代码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
PHAsset *asset;
if ([info[@"UIImagePickerControllerMediaType"] isEqualToString:@"public.movie"]) {
// Video
asset = [[PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil] lastObject];
} else if ([info[@"UIImagePickerControllerMediaType"] isEqualToString:@"public.image"]) {
// Photo
PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil];
asset = [[PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil] lastObject];
}
}
两者都if statements
适用于照片和视频,除非您从名为 的相册中选择一个项目"My Photo Stream"
。
当您从中选择一个项目时"My Photo Stream"
,返回PHAsset
的始终是nil
。
我发现以下问题似乎可以通过有效的解决方案得到答案:ALAssetsLibraryassetForURL:在 iOS 8.1 中的“我的照片流”中始终为照片返回 nil
但是上面的链接使用了AssetsLibrary
苹果不再推荐的框架:
“在 iOS 8.0 及更高版本中,使用 Photos 框架而不是 Assets Library 框架。Photos 框架为使用用户的照片库提供了更多功能和更好的性能。请参阅 Photos Framework Reference。”
我需要能够为相册PHAsset
中的媒体项返回对象。"My Photo Stream"
现在,字典中返回的参考 URLUIImagePickerController
是info
登录控制台的有效 URL,但使用此 URL 时,PHAsset
永远不会返回有效对象。
didFinishPickingMediaWithInfo:
以下是在委托方法的信息字典中返回的参考 URL 示例:
assets-library://asset/asset.JPG?id=DCF5C6E5-B4F4-4E61-9C4B-CC63E104BF2B&ext=JPG