UIImagePickerController在强制触摸时崩溃?

Air*_*ène 11 uiimagepickercontroller ios ios9

对于iOS 9,UIImagePickerControllers如果我对所呈现的图像进行强制触摸,我的所有现在都会崩溃.错误信息是:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSObject previewingContext:viewControllerForLocation:]: unrecognized selector sent to class 0x1a0752020'
Run Code Online (Sandbox Code Playgroud)

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

小智 13

答案不是解决问题的明确方法.您可以使用私有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) {

    }
}
Run Code Online (Sandbox Code Playgroud)


nol*_*anw 7

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

问题似乎是名为的私有类在其超类上PUPhotosGridViewController调用该UIViewControllerPreviewing方法,该类不实现该方法.解决方法调整了违规方法并尝试调用原始实现,但它吞下了异常,因此我们不会崩溃.希望通过这种方式,如果/当它得到修复,那么解决方法不会影响该修复.