Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试从资源库Url获取UIImage_Ios_Swift_Uiimage_Alassetslibrary - Fatal编程技术网

Ios 尝试从资源库Url获取UIImage

Ios 尝试从资源库Url获取UIImage,ios,swift,uiimage,alassetslibrary,Ios,Swift,Uiimage,Alassetslibrary,我正在尝试从给定的资产库Url获取UIImage对象。我想让函数为我做这个。 给定的Url是:assets-library://asset/asset.JPG?id=46811D66-DBB4-46D9-BBA2-0CF0D58FC7AD&ext=JPG我尝试了以下方法: var url = NSURL() // url = "assets-library://asset/asset.JPG?id=46811D66-DBB4-46D9-BBA2-0CF0D58FC7AD&ext=JPG"

我正在尝试从给定的资产库Url获取UIImage对象。我想让函数为我做这个。 给定的Url是:
assets-library://asset/asset.JPG?id=46811D66-DBB4-46D9-BBA2-0CF0D58FC7AD&ext=JPG
我尝试了以下方法:

var url = NSURL() // url = "assets-library://asset/asset.JPG?id=46811D66-DBB4-46D9-BBA2-0CF0D58FC7AD&ext=JPG" got it from another scene
var asset = ALAssetsLibrary()
var tempImage = UIImage()
tempImage = getUIImagefromAsseturl(url)



func getUIImagefromAsseturl (url: NSURL) -> UIImage {

    asset.assetForURL(url, resultBlock: {
        (asset: ALAsset!) in
        if asset != nil {
            var assetRep: ALAssetRepresentation = asset.defaultRepresentation()
            var iref = assetRep.fullResolutionImage().takeUnretainedValue()
            var image =  UIImage(CGImage: iref)
            return image

        }
        }, failureBlock: {
            (error: NSError!) in

            NSLog("Error!", nil)
        }
    )


}
但我总是会犯这样的错误: 无法使用类型为“(NSURL,resultBlock:(ALAsset!)->”的参数列表调用“assetForURL”。\u,failureBlock:(NSError!)->”


有人能告诉我我做错了什么吗?

看起来您正试图从
结果块中返回图像,但该块的类型为
(阿拉塞特!)->Void
,因此无法从块内返回图像。虽然Xcode的Swift错误在这里可能更清楚,但我敢打赌,由于您试图从
resultBlock
返回UIImage,编译器已将您提供的
resultBlock
的类型推断为
(ALAsset!)->UIImage
,这与
(ALAsset!)->Void
的预期类型不匹配

由于
assertForURL:resultBlock:failureBlock:
的工作方式(两个完成返回类型
Void
),您将永远无法从两个完成块中返回任何内容。您需要将用于显示或以其他方式处理图像的代码作为
resultBlock
的一部分传递到
assertForURL:resultBlock:failureBlock:

因此,您将无法从函数
getUIImagefromAsseturl:
返回图像,因此您需要删除返回类型
UIImage

如果您确实计划显示图像,最好从主线程内更新UI。这很简单:

func getUIImagefromAsseturl (url: NSURL) {

    asset.assetForURL(url, resultBlock: { asset in
        if let ast = asset {
            let assetRep = ast.defaultRepresentation()
            let iref = assetRep.fullResolutionImage().takeUnretainedValue()
            let image = UIImage(CGImage: iref)
            dispatch_async(dispatch_get_main_queue(), {
                // ...Update UI with image here
            })
        }
    }, failureBlock: { error in
        println("Error: \(error)")
    })
}

谢谢你的回复,但是将代码更改为你的代码仍然会抛出相同的错误。我再次更新了代码。试试看。它离你的稍远一点,但功能与我上次编辑的相同。这一个已在Xcode 6.3.1中验证有效。我没有像您那样在
resultBlock
中测试nil,而是使用了标准的Swift
if-let
绑定。在定义
resultBlock
时,我还使用了
{asset in…}
而不是
{(asset:ALAsset!)in…}
。这允许Xcode在处理块时只使用推断类型,尽管它实际上不应该有什么区别。Xcode+Swift有时仍然会很敏感。我的图像路径是:/var/mobile/Media/DCIM/100APPLE/IMG_0250.JPG我可以使用资产库获取图像吗