调用此方法时,我的应用程序崩溃,出现错误:主题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
谢谢!
答案 0 :(得分:1)
将@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")
}
})
答案 1 :(得分:0)
好的答案与代码行无关。我必须转到View然后调试然后单击视图控制台,这样我才能看到控制台打印错误消息,告诉我将密钥NSPhotoLibraryUsageDescription
添加到Info.plist中。
当您使用照片框架时,您必须包含密钥以及想要访问相机胶卷的原因。一旦我将这个键添加到plist中,一切都有效。