首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhotoKit iOS8 -使用"PHImageFileURLKey“检索图像

PhotoKit iOS8 -使用"PHImageFileURLKey“检索图像
EN

Stack Overflow用户
提问于 2014-11-21 16:13:38
回答 2查看 8.7K关注 0票数 0

我是否可以使用从"PHImageFileURLKey"返回的路径进入照片库并检索图像?

返回的路径采用以下格式:

代码语言:javascript
复制
"file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG"

我的计划是将此路径存储在数据库中,并在需要获取图像时使用它来获取图像。

任何帮助都是非常感谢的。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-05 12:21:26

我认为您从URL检索Photo资产的解决方案是错误的。

下面是我要做的事情(假设您可以访问PHAsset):

存储localIdentifier:

代码语言:javascript
复制
PHAsset *asset = /*Your asset */
NSString *localIdentifier = asset.localIdentifier;

//Now save this local identifier, or an array of them

当您是时候检索它们时,您只需:

代码语言:javascript
复制
PHFetchResult *savedAssets = [PHAsset fetchAssetsWithLocalIdentifiers:savedLocalIdentifiers options:nil];
[savedAssets enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) {
    //this gets called for every asset from its localIdentifier you saved
}];

如果你只能访问“PHImageFileURLKey”,那么忽略这个答案。

票数 9
EN

Stack Overflow用户

发布于 2014-11-23 08:56:38

这是没有文档的,所以我强烈建议不要使用这个URL来做任何比原型应用程序更多的事情。尽管如此,这似乎确实有效:

代码语言:javascript
复制
dispatch_queue_t queue = dispatch_queue_create("photoLoadQueue", 0);
dispatch_async(queue, ^{
    NSURL *privateUrl = [NSURL URLWithString:@"file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG";
    NSData *imageData = [NSData dataWithContentsOfURL:privateUrl];
    dispatch_async(dispatch_get_main_queue(), ^{
        self.imageView.image = [UIImage imageWithData:imageData];
    });
});

当然,您需要替换用于启动url的字符串,该字符串对于您的手机是有效的。

这样做可能有很多问题--这不是框架应该如何使用的问题。以下是我头顶上的一些:

  1. 在模拟器中运行时,在启动应用程序时根路径会有规律的变化,因此,如果您像这样存储absoluteUrls,您的数据库将很快充满死URL。这至少是不方便的。
  2. 更糟糕的是,这些图像的URL可能会在一个真正的设备上发生变化--你无法控制它,一旦它们改变了,这就是你的应用程序让用户重新选择它们或任何东西的错误。
  3. 您永远也不会发现照片来自PHAsset的更改。
  4. 这可能是在规避用户的照片访问权限--如果您的应用程序访问照片的权限被撤销了,会发生什么情况?然而,这可能是存储照片供以后使用的许多方法的一个问题。
  5. 您不能控制该文件-如果用户删除它怎么办?

如果我是你,我会使用PHImageManager requestImageForAsset: targetSize: contentMode: options: resultHandler:从照片框架中正确地检索图像,并将其存储在应用程序目录中的一个文件中,无论你用它做什么,它都是一个合理的分辨率。这仍然不会给您带来资产变化,但是一个很好的解决方案。

如果您希望自己存储资产,并且只在实际需要时才请求映像,则可能值得研究临时资产收集,尽管我没有使用它们,这样可能无法满足您的需要。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27065705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档