Swift Share扩展,ALAsset为零

时间:2014-11-25 12:28:41

标签: ios swift alassetslibrary

我想获得一些关于我将与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

1 个答案:

答案 0 :(得分:1)

当前的问题是,您正在传递文件网址代替此行的资产网址:ALAssetsLibrary().assetForURL(url, resultBlock: { (myasset:ALAsset!) -> Void in。 共享扩展程序将网址返回到iphone文件系统上的路径...格式为file:///....。这些与ALAsset在assetForURL方法中所需的URL不同。

不幸的是,虽然这使得代码更加正确,但它仍然无法解决问题。我花了一些时间用很多不同的方法。通过AssetsLibrary和给定文件路径将新图像写入磁盘将在完成后返回资产URL,这将成功运行 - 尽管您显然不想在相机胶卷中重复拍照。 (注意:没有办法删除ALAsset)。完成后,您可能会保留文件路径并删除新图像,​​但这是一种非常混乱的方法。

鉴于这些限制,我最终改写了我的方法。