我想获得一些关于我将与Share扩展共享的图像的额外信息。我可以从url创建UIImage但是当我想获得一个ALAsset时,我得到nil。有人有这个问题吗?
itemProvider!.loadItemForTypeIdentifier(String(kUTTypeImage), options: nil, completionHandler: { (decoder: NSSecureCoding!, error: NSError!) -> Void in
if ALAssetsLibrary.authorizationStatus() == ALAuthorizationStatus.Authorized {
if let url = decoder as? NSURL {
ALAssetsLibrary().assetForURL(url, resultBlock: { (myasset:ALAsset!) -> Void in
println(url)
println(fm.fileExistsAtPath(url.path!))
println(myasset)
let location = myasset?.valueForProperty(ALAssetPropertyLocation) as CLLocation?
let date = myasset?.valueForProperty(ALAssetPropertyDate) as NSDate?
self.extensionContext?.completeRequestReturningItems([AnyObject](), completionHandler: nil)
}, failureBlock: { (myerror:NSError!) -> Void in
})
}
}
输出
file:///var/mobile/Media/DCIM/102APPLE/IMG_2977.JPG
true
nil
答案 0 :(得分:1)
当前的问题是,您正在传递文件网址代替此行的资产网址:ALAssetsLibrary().assetForURL(url, resultBlock: { (myasset:ALAsset!) -> Void in
。
共享扩展程序将网址返回到iphone文件系统上的路径...格式为file:///....
。这些与ALAsset在assetForURL
方法中所需的URL不同。
不幸的是,虽然这使得代码更加正确,但它仍然无法解决问题。我花了一些时间用很多不同的方法。通过AssetsLibrary
和给定文件路径将新图像写入磁盘将在完成后返回资产URL,这将成功运行 - 尽管您显然不想在相机胶卷中重复拍照。 (注意:没有办法删除ALAsset)。完成后,您可能会保留文件路径并删除新图像,但这是一种非常混乱的方法。
鉴于这些限制,我最终改写了我的方法。