Приложение вылетает, когда я вызываю requestImage

Мое приложение вылетает с ошибкой. Поток 1: EXC_BAD_INSTRUCTION при вызове этого метода:

imageManager.requestImage(for: asset!, targetSize: CGSize(width:100,height:100), contentMode: .aspectFit, options: options, resultHandler: {(image,info) -> Void in})

Полный код загружен:

    override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.delegate = self;
    collectionView.dataSource = self;

    let fetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: nil);
    let asset = fetchResult.firstObject;

    let options = PHImageRequestOptions()
    options.deliveryMode = .fastFormat
    options.isSynchronous = true

    let imageManager = PHCachingImageManager();
    imageManager.requestImage(for: asset!, targetSize: CGSize(width:100,height:100), contentMode: .aspectFit, options: options, resultHandler: {(image,info) -> Void in
    print("Got image")
    })
}

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

вот синтаксис метода, который я пытаюсь вызвать:

func requestImage(for asset: PHAsset, targetSize: CGSize, contentMode: PHImageContentMode, options: PHImageRequestOptions?, resultHandler: (UIImage?, [NSObject : AnyObject]?) -> Void) -> PHImageRequestID

Спасибо!

2 ответа

Решение

Хорошо, ответ не имеет ничего общего со строкой кода. Мне нужно было перейти в View, затем Debug, затем нажать view console, чтобы я мог увидеть, как консоль распечатывает сообщение об ошибке, говорящее мне добавить ключ NSPhotoLibraryUsageDescription в Info.plist.

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

Принимая ответ @James Zaghini на другой уровень.

Вы также должны проверить UIImage или информация nil или нет.

guard let asset = asset else { return }

let imageManager = PHCachingImageManager();
imageManager.requestImage(for: asset, targetSize: CGSize(width:100,height:100), contentMode: .aspectFit, options: options, resultHandler: {(image,info) -> Void in
    if let img = image{
        print("Got Image")
    }
    if let imgInfo = info{
        print("Info")
    }
})
Другие вопросы по тегам