Ios Swift共享扩展,ALAsset为零
我想获得一些关于我将与共享扩展共享的图像的额外信息。我可以从url创建UIImage,但是当我想要获得一个集合时,我得到的是零。有人有这个问题吗Ios Swift共享扩展,ALAsset为零,ios,swift,alassetslibrary,Ios,Swift,Alassetslibrary,我想获得一些关于我将与共享扩展共享的图像的额外信息。我可以从url创建UIImage,但是当我想要获得一个集合时,我得到的是零。有人有这个问题吗 itemProvider!.loadItemForTypeIdentifier(String(kUTTypeImage), options: nil, completionHandler: { (decoder: NSSecureCoding!, error: NSError!) -> Void in if ALAssetsLibrary.aut
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
当前的问题是,您正在传递一个文件url来代替此行的资产url:
AlassetLibrary().assetForURL(url,resultBlock:{(myasset:ALAsset!)->Void in
。
共享扩展将url返回到iphone文件系统上的路径……形式如下:file:///....
。这些URL与ALAsset在assetForURL
方法中需要的URL不同
不幸的是,虽然这使代码更加正确,但仍然无法解决问题。我花了一些时间研究了许多不同的方法。通过AssetLibrary
将新图像写入磁盘,并且给定的文件路径将在完成后返回一个资产url,该url将成功运行-尽管您显然不希望重复照片在您的相机卷中。(注意:无法删除图像集)。您可能会保留文件路径,并在完成后删除新图像,但这是一种非常混乱的方法
考虑到这些限制,我最终改写了我的方法。我遇到了完全相同的问题(使用objective-c)。它命中了结果块,但里面的资源为零。我感觉新的iOS 8照片框架可能需要用于此框架。希望不是。你是对的,我现在看到资源url的形式是资产-library://asset/asset.JPG?id=00000000-0000-0000-0000-000000000 6BD&ext=JPG根据我的url,我想我找不到这个url:(我已经花了相当长的时间尝试从文件URL到资产URL。据我所知,这是不可能的。我甚至不认为相反的情况是可能的(从资产URL到文件URL)。这似乎是苹果沙箱资产访问…可能是出于安全原因。