当我调用requestImage时,应用程序崩溃了

时间:2016-08-05 04:05:09

标签: ios swift photokit

调用此方法时,我的应用程序崩溃,出现错误:主题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 个答案:

答案 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中,一切都有效。