iPhone 6s - iOS 9.1 在 [UICollectionViewController previewingContext:viewControllerForLocation:] 上崩溃
iPhone 6s - iOS 9.1 crashing on [UICollectionViewController previewingContext:viewControllerForLocation:]
这是一个非常愚蠢的堆栈跟踪,因为 looking around,我唯一能想到的是 iPhone 6s 用户正在尝试 3D 触摸某些东西,而我的手势识别器(在某个地方,我不知道是哪一个,因为它没有告诉我哪条线,甚至哪个控制器)不知道如何处理它?我没有添加任何 3D 触摸手势识别器,也没有在任何地方实现 3D 触摸交互。
我在这个版本中的目标是 iOS 8,不幸的是我没有 iPhone 6s 来测试所以不能真正重现它。
关于可能导致它的原因、如何缩小where/what、如何重现以及如何处理异常的想法?
Thread : Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x18586cf48 __exceptionPreprocess
1 libobjc.A.dylib 0x19ad17f80 objc_exception_throw
2 CoreFoundation 0x185873b54 __CFExceptionProem
3 UIKit 0x18b63438c -[UICollectionViewController previewingContext:viewControllerForLocation:]
4 UIKit 0x18b187d7c -[_UIViewControllerPreviewSourceViewRecord previewInteractionController:viewControllerForPreviewingAtPosition:inView:presentingViewController:]
5 UIKit 0x18b43cd4c -[UIPreviewInteractionController startInteractivePreviewAtLocation:inView:]
6 UIKit 0x18b43d848 -[UIPreviewInteractionController startInteractivePreviewWithGestureRecognizer:]
7 UIKit 0x18b43e8c0 -[UIPreviewInteractionController _handleRevealGesture:]
8 UIKit 0x18b37b330 _UIGestureRecognizerSendTargetActions
9 UIKit 0x18afa4b5c _UIGestureRecognizerSendActions
10 UIKit 0x18ae3285c -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:]
11 UIKit 0x18b37c70c ___UIGestureRecognizerUpdate_block_invoke898
12 UIKit 0x18adf18b8 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks
13 UIKit 0x18adee63c _UIGestureRecognizerUpdate
14 UIKit 0x18ae306cc -[UIWindow _sendGesturesForEvent:]
15 UIKit 0x18ae2fcc8 -[UIWindow sendEvent:]
16 UIKit 0x18ae004a4 -[UIApplication sendEvent:]
17 UIKit 0x18adfe76c _UIApplicationHandleEventQueue
18 CoreFoundation 0x185824544 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
19 CoreFoundation 0x185823fd8 __CFRunLoopDoSources0
20 CoreFoundation 0x185821cd8 __CFRunLoopRun
21 CoreFoundation 0x185750ca0 CFRunLoopRunSpecific
22 GraphicsServices 0x190cd4088 GSEventRunModal
23 UIKit 0x18ae68ffc UIApplicationMain
24 XXXXXXXXXX 0x10013739c main (main.m:16)
25 libdyld.dylib 0x19b55a8b8 start
您是否在应用中的某处使用了 UIImagePickerController
?它和 3D Touch 存在一个已知问题:
用力触摸 UIImagePickerController
中的照片似乎会使任何应用程序崩溃。我想我们必须等到 Apple 修复这个问题。
PUPhotoGridViewController(用于 UIImagePickerController)是一个简单的 UICollectionViewController,您可以为未实现的方法编写扩展。
extension UICollectionViewController: UIViewControllerPreviewingDelegate {
public func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
return nil;
}
public func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
}
}
感谢!
这是OC版本:
页眉
@interface UICollectionViewController (FixCrash) <UIViewControllerPreviewingDelegate>
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location;
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit;
@end
实施
@implementation UICollectionViewController (FixCrash)
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
return nil;
}
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit {
return;
}
@end
这是一个非常愚蠢的堆栈跟踪,因为 looking around,我唯一能想到的是 iPhone 6s 用户正在尝试 3D 触摸某些东西,而我的手势识别器(在某个地方,我不知道是哪一个,因为它没有告诉我哪条线,甚至哪个控制器)不知道如何处理它?我没有添加任何 3D 触摸手势识别器,也没有在任何地方实现 3D 触摸交互。
我在这个版本中的目标是 iOS 8,不幸的是我没有 iPhone 6s 来测试所以不能真正重现它。
关于可能导致它的原因、如何缩小where/what、如何重现以及如何处理异常的想法?
Thread : Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x18586cf48 __exceptionPreprocess
1 libobjc.A.dylib 0x19ad17f80 objc_exception_throw
2 CoreFoundation 0x185873b54 __CFExceptionProem
3 UIKit 0x18b63438c -[UICollectionViewController previewingContext:viewControllerForLocation:]
4 UIKit 0x18b187d7c -[_UIViewControllerPreviewSourceViewRecord previewInteractionController:viewControllerForPreviewingAtPosition:inView:presentingViewController:]
5 UIKit 0x18b43cd4c -[UIPreviewInteractionController startInteractivePreviewAtLocation:inView:]
6 UIKit 0x18b43d848 -[UIPreviewInteractionController startInteractivePreviewWithGestureRecognizer:]
7 UIKit 0x18b43e8c0 -[UIPreviewInteractionController _handleRevealGesture:]
8 UIKit 0x18b37b330 _UIGestureRecognizerSendTargetActions
9 UIKit 0x18afa4b5c _UIGestureRecognizerSendActions
10 UIKit 0x18ae3285c -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:]
11 UIKit 0x18b37c70c ___UIGestureRecognizerUpdate_block_invoke898
12 UIKit 0x18adf18b8 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks
13 UIKit 0x18adee63c _UIGestureRecognizerUpdate
14 UIKit 0x18ae306cc -[UIWindow _sendGesturesForEvent:]
15 UIKit 0x18ae2fcc8 -[UIWindow sendEvent:]
16 UIKit 0x18ae004a4 -[UIApplication sendEvent:]
17 UIKit 0x18adfe76c _UIApplicationHandleEventQueue
18 CoreFoundation 0x185824544 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
19 CoreFoundation 0x185823fd8 __CFRunLoopDoSources0
20 CoreFoundation 0x185821cd8 __CFRunLoopRun
21 CoreFoundation 0x185750ca0 CFRunLoopRunSpecific
22 GraphicsServices 0x190cd4088 GSEventRunModal
23 UIKit 0x18ae68ffc UIApplicationMain
24 XXXXXXXXXX 0x10013739c main (main.m:16)
25 libdyld.dylib 0x19b55a8b8 start
您是否在应用中的某处使用了 UIImagePickerController
?它和 3D Touch 存在一个已知问题:
用力触摸 UIImagePickerController
中的照片似乎会使任何应用程序崩溃。我想我们必须等到 Apple 修复这个问题。
PUPhotoGridViewController(用于 UIImagePickerController)是一个简单的 UICollectionViewController,您可以为未实现的方法编写扩展。
extension UICollectionViewController: UIViewControllerPreviewingDelegate {
public func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
return nil;
}
public func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
}
}
感谢
这是OC版本:
页眉
@interface UICollectionViewController (FixCrash) <UIViewControllerPreviewingDelegate>
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location;
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit;
@end
实施
@implementation UICollectionViewController (FixCrash)
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
return nil;
}
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit {
return;
}
@end