Ios8 从文件URL检索ALAsset或PHAsset

Ios8 从文件URL检索ALAsset或PHAsset,ios8,ios8-extension,photokit,ios-extensions,Ios8,Ios8 Extension,Photokit,Ios Extensions,在Photos.app中选择要传递给操作扩展的图像似乎会产生磁盘上图像的路径(例如:file:///var/mobile/Media/DCIM/109APPLE/IMG_9417.JPG)。有没有办法得到相应的ALAsset或PHAsset URL看起来与调用PHImageManager.requestImageDataForAsset得到的PHImageFileURLKey条目对应。我不想遍历所有的阶段集来找到它。我做了我不想做的事情,并将这种愚蠢的搜索方法组合在一起。它可以工作,虽然它很可怕

在Photos.app中选择要传递给操作扩展的图像似乎会产生磁盘上图像的路径(例如:
file:///var/mobile/Media/DCIM/109APPLE/IMG_9417.JPG
)。有没有办法得到相应的ALAsset或PHAsset


URL看起来与调用
PHImageManager.requestImageDataForAsset
得到的
PHImageFileURLKey
条目对应。我不想遍历所有的阶段集来找到它。

我做了我不想做的事情,并将这种愚蠢的搜索方法组合在一起。它可以工作,虽然它很可怕,速度很慢,而且当照片库很大时会给我带来内存问题

作为科科和斯威夫特的知音,我很欣赏精致的技巧。谢谢

func PHAssetForFileURL(url:NSURL)->PHAsset?{
var imageRequestOptions=PHImageRequestOptions()
imageRequestOptions.version=.Current
imageRequestOptions.deliveryMode=.FastFormat
imageRequestOptions.resizeMode=.Fast
imageRequestOptions.synchronous=true
让fetchResult=PHAsset.fetchAssetsWithOptions(nil)
对于var index=0;index
这是对您的自动回答(“优化提示”)的评论。因此,注释不会针对代码示例进行剪切,所以我们开始吧

  • 您可以将for索引循环替换为更简单的for-each循环。例如,类似于:

    for asset in PHAsset.fetchAssetsWithOptions(nil)
    
  • 截至上次检查时,
    info[“PHImageFileURLKey”]
    中的键未记录。被告知。我不认为这会让你被拒绝,但这种行为随时可能改变


  • 这是一个NSURL。你不知道怎么从那里到一个摄影棚吗?我不知道。还有
    fetchAssetsWithALAssetURLs
    ,但这只需要
    assets库://
    url。嗯,比这更糟糕。由于沙箱的原因,您甚至不能以这种方式进入库。AlassetLibrary
    assetForURL
    呢?还需要资产库方案(这并不是阻止我的原因:我尝试了
    assetForURL
    FetchAssetWithAlassetUrls
    来踢踢;没有骰子)。谢谢您的提示。我当然更喜欢。。在语法上,但是PHFetchResult没有实现生成器协议,并且不能以这种方式进行迭代(除非最近发生了更改)。我无法让它工作。并指示您需要SequenceType(不是生成器,结果是)使符合NSFastEnumeration的类型也可使用。已编辑的注释,顺序错误:@Soybean我现在只能与Objective-C对话,但在那里,它将是
    NSFastEnumeration
    ,是的:
    @interface PHFetchResult:NSObject
    :)