iOS Photos 框架无法获取图像数据/UTI

Posted

技术标签:

【中文标题】iOS Photos 框架无法获取图像数据/UTI【英文标题】:iOS Photos framework unable to get image data / UTI 【发布时间】:2015-06-03 07:26:50 【问题描述】:

当从照片框架请求图像时,我设法正确地获取了除最后 64 个之外的所有图像。在下面的代码中,最后一个总是为 dataUTIimageData 返回 nil。在试图弄清楚发生了什么时,我发现PHAsset 确切地知道 UTI 是什么,但向我报告它是 nil。

其他人看到了吗?

您可以看到,当我的代码报告为 nil 时,我已让我的代码访问资产的 UTI,以便我的应用程序可以确定它是否是 gif,但这不是一种可取的做法,而且我从来没有得到 @ 987654324@ 反正也没什么帮助!

PHFetchOptions* fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHFetchResult *allPhotosResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options: fetchOptions];

[allPhotosResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) 

    PHImageRequestOptions* options = [[PHImageRequestOptions alloc] init];
    options.synchronous = NO;
    options.networkAccessAllowed = YES;
    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

    [[PHImageManager defaultManager] requestImageDataForAsset: asset options: options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) 
         NSString* val = [asset valueForKey: @"uniformTypeIdentifier"];
         if( !dataUTI )
         
             dataUTI = val;
         
    ];
];

编辑: 我忘了提到缺少的图像创建日期不是最新的图像,并且似乎分散了。实际上,根据它们的创建日期,即使是照片应用程序似乎也没有显示它们。但似乎没有什么应该在他们的位置上查看他们的创建日期将放置它们的相邻图像。

【问题讨论】:

最后这 64 个图像是否存在于磁盘上?你能检查一下吗? iCloud 设置中有一个选项称为优化我的 iphone,它会清除磁盘中在过去 30 天内未点击的所有图像。 我不这么认为,他们的创作日期更远了。实际上,忘了提一下,根据它们的创建日期,即使是照片应用程序似乎也没有显示它们......但是看起来没有任何东西应该在那个位置看他相邻的图像...... 您可以尝试将 networkAccessAllowed 属性 PHImageRequestOptions 设置为 YES 吗? 已经是了,我已经在良好的连接上尝试过了 您能否打印此 API 返回的所有属性以及资产?如果你能提供更多的代码也很好? 【参考方案1】:

这里没有太多答案,所以很高兴其他人可以大肆解释它!

查看丢失资产的创建日期,我设法在照片应用程序中找到了我的应用程序中丢失的一个。它有一个缩略图,但是当我选择它时,它会执行圆形下载指示器来下拉数据,然后尝试在我的应用程序的操作扩展中打开它(让我们在照片应用程序或其他地方预览 gif 的动画)出现一个弹出窗口说准备它时出错。我以前从未见过,但显然 iCloud 出了点问题。

以前我在我的应用程序中请求PHImageRequestOptionsVersionUnadjusted,但将其切换为PHImageRequestOptionsVersionOriginal 似乎已修复它......?

【讨论】:

以上是关于iOS Photos 框架无法获取图像数据/UTI的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift (iOS) 和 Photos 框架保存自定义图像的元数据

如何使用 Photos 框架从 iOS 上的相机胶卷中获取最新照片?

iOS 8 Photos 框架:使用 iOS8 获取所有相册的列表

用于移动safari的html5网络应用程序,用于从Photos.app上传图像?

iOS UTI(统一类型标识)

在 iOS 中访问 Photos.sqlite 以检索照片元数据