UIImagePickerController 在强制触摸时崩溃?

UIImagePickerController crashing on force touch?

使用 iOS 9,如果我用力触摸显示的图像,我所有的 UIImagePickerControllers 现在都会崩溃。 错误信息是:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSObject previewingContext:viewControllerForLocation:]: unrecognized selector sent to class 0x1a0752020'

我想这是 Apple 的一个错误,但有人可以解决吗?

不幸的是,苹果出现了错误。你只需要等待修复。 https://forums.developer.apple.com/thread/21932

这里有一个解决方法:https://gist.github.com/nolanw/bd0a8997632fe92a9f83(警告:在私有 class 上调配一个方法,这可能会让您感到恶心)。将这些文件粘贴到您的项目中,然后从某个地方调用 MSDPreventImagePickerCrashOn3DTouch(例如 -applicationDidFinishLaunching:…)。

问题似乎是一个名为 PUPhotosGridViewController 的私有 class 调用了它的 superclass 上的 UIViewControllerPreviewing 方法,它没有实现该方法。变通方法混合了有问题的方法并尝试调用原始实现,但它吞下了异常,因此我们不会崩溃。希望通过这种方式,if/when 它得到修复,然后解决方法不会影响该修复。

答案不是解决问题的明确方法。您可以使用 Private API.

获得苹果的拒绝

PUPhotoGridViewController 是一个简单的 UICollectionViewController,您可以为未实现的方法编写扩展。

extension UICollectionViewController: UIViewControllerPreviewingDelegate {
    public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        return nil
    }

    public func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {

    }
}