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) {
}
}
使用 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) {
}
}