2015-04-17 4 views
1

Я пытаюсь получить изображение, которое находится в библиотеке фотографий, и я использую assetForURL для этой цели, но я все время получаю сообщение об ошибке «Не могу вызвать« assetForURL »с аргументом Список типов (NSURL, resultBlock: (ALAsset!) -> Void, (NSError!) -> Void) '"Использование assetForURL в Swift 1.2

Я проверил здесь вопросы и как другие люди используют этот метод, но я всегда получаю такая же ошибка .. Вот мой метод:

class func getImageFromPath(path: String) -> UIImage? { 
    let assetsLibrary = ALAssetsLibrary() 
    let url = NSURL(string: path)! 

    assetsLibrary.assetForURL(url, resultBlock: { (asset: ALAsset!) -> Void in 
     return UIImage(CGImage: asset.defaultRepresentation().fullResolutionImage()) 
    }) { (error: NSError!) -> Void in 
     return nil 
    } 
} 

Я не знаю, чего мне не хватает .. thx!

+0

Вы используете средство выбора изображений, чтобы пользователь мог выбрать изображение? – Jordan

+0

Да, но единственный путь, который я могу получить, является одним из типов: «assets-library: //asset/asset.JPG? Id = 10C39CED-5CB9-49E3-8517-253F82EA3AC2 & ext = JP G», поэтому я использовать tu метод assetURL .. любые идеи? – diegomen

+0

Хорошо, можете ли вы опубликовать код, который вы используете, для вызова функции getImageFromPath? – Jordan

ответ

3

ALAssetsLibraryAssetForURLResultBlock и ALAssetsLibraryAccessFailureBlock не возвращают значение. (-> Void средства не имеют возвращаемого значения.)

(ALAsset!) -> Void или (NSError!) -> Void

Таким образом, вы не должны возвращать image или error внутри этих блоков. Например, просто назначьте локальную переменную в блоке. И верните переменный внешний блок.

Как показано ниже:

class func getImageFromPath(path: String) -> UIImage? { 
    let assetsLibrary = ALAssetsLibrary() 
    let url = NSURL(string: path)! 

    var image: UIImage? 
    var loadError: NSError? 
    assetsLibrary.assetForURL(url, resultBlock: { (asset) -> Void in 
     image = UIImage(CGImage: asset.defaultRepresentation().fullResolutionImage().takeUnretainedValue()) 
    }, failureBlock: { (error) -> Void in 
     loadError = error; 
    }) 

    if (!error) { 
     return image 
    } else { 
     return nil 
    } 
} 
0

Kishikawa Кацуми, вы были правы! проблема была в возвращении, я меняю свой метод, и он отлично работает:

class func getImageFromPath(path: String, onComplete:((image: UIImage?) -> Void)) { 
    let assetsLibrary = ALAssetsLibrary() 
    let url = NSURL(string: path)! 
    assetsLibrary.assetForURL(url, resultBlock: { (asset) -> Void in 
     onComplete(image: UIImage(CGImage: asset.defaultRepresentation().fullResolutionImage().takeUnretainedValue())) 
     }, failureBlock: { (error) -> Void in 
      onComplete(image: nil) 
    }) 
} 

thx !!