Swift Share 扩展,ALAsset 为 nil
Posted
技术标签:
【中文标题】Swift Share 扩展,ALAsset 为 nil【英文标题】:Swift Share extension, ALAsset is nil 【发布时间】:2014-11-25 12:28:41 【问题描述】:我想获得一些关于我将与共享扩展程序共享的图像的额外信息。我可以从 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
【问题讨论】:
我也遇到过同样的问题(使用objective-c)。它击中了结果块,但里面的资产为零。我觉得新的 ios 8 照片框架可能需要用于这个框架。希望不会。 【参考方案1】:当务之急是您正在传递 file url 来代替此行的 asset url:ALAssetsLibrary().assetForURL(url, resultBlock: (myasset:ALAsset!) -> Void in
。
共享扩展将 url 返回到 iphone 文件系统上的路径...形式为:file:///....
。这些与 ALAsset 在 assetForURL
方法中所需的 url 不同。
不幸的是,虽然这使代码更正确,但它仍然不能解决问题。我花了一些时间使用许多不同的方法。通过AssetsLibrary
将新图像写入磁盘,并且给定的文件路径将在完成后返回一个资产 url,这将成功运行 - 尽管您显然不希望相机胶卷中出现重复的照片。 (注意:无法删除 ALAsset)。您可能会保留文件路径并在完成后删除新图像,但这是一种非常混乱的方法。
鉴于这些限制,我最终重写了我的方法。
【讨论】:
你是对的,我现在看到资产 url 的格式为 assets-library://asset/asset.JPG?id=00000000-0000-0000-0000-0000000006BD&ext=JPG 我想我根据我的 url 找不到这个 url :( 我花了很长时间尝试将文件 URL 转换为资产 URL。据我所知,这是不可能的。我什至认为相反的情况是不可能的(资产 URL 到文件 URL)。这似乎是 Apple 沙盒资产访问...可能是出于安全原因。以上是关于Swift Share 扩展,ALAsset 为 nil的主要内容,如果未能解决你的问题,请参考以下文章
在 Share Extension (Swift) 中处理 NSItemProvider 数据类型