Приложение вылетает, когда я вызываю 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")
}
})