无论如何,我可以使用从"PHImageFileURLKey"
返回的路径进入照片库并检索图像吗?
返回的路径采用以下格式:
"file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG"
我的计划是将此路径存储在数据库中,并在需要将其恢复时使用它来获取图像。
感谢任何帮助。谢谢!
答案 0 :(得分:8)
我认为您从URL检索Photo Kit资产的解决方案是错误的。
以下是我要做的事情(假设您有权访问PHAsset):
存储localIdentifier:
PHAsset *asset = /*Your asset */
NSString *localIdentifier = asset.localIdentifier;
//Now save this local identifier, or an array of them
当需要检索它们时,您只需执行以下操作:
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”,请忽略此答案。
答案 1 :(得分:2)
这是没有记录的,因此我强烈建议不要将该网址用于原型应用以外的任何其他内容。也就是说,这确实有效:
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];
});
});
当然,您需要将用于启动网址的字符串替换为对您的手机有效的字符串。
这样做可能存在很多问题 - 它不是如何使用框架的。这里有一些我的头脑:
PHAsset
的更改。如果我是你,我会使用PHImageManager requestImageForAsset: targetSize: contentMode: options: resultHandler:
从照片框架中正确检索图像,然后将其存储在应用程序目录中的文件中,以合理的分辨率为您提供任何帮助&#39用它来做这仍然无法为您提供资产变更,但这是一个非常好的解决方案。
如果您想自己存储资产并且只在实际需要时请求图片,那么可能值得调查transient asset collections,虽然我没有使用它们,所以可能不适用于您需要。