2015-12-11 55 views
4

我收到崩溃日志,说我的应用崩溃在[UIPopoverPresentationController presentationTransitionWillBegin],但在我的代码中无处使用UIPopoverPresentationController。这一切都在iPad上,我使用的UIDocumentInteractionController看起来很相似,也许它是UIPopoverPresentationController的一个子类,我不知道。任何想法可能会造成这种情况?崩溃日志表明应用程序崩溃UIPopoverPresentationController方法不存在于我的应用程序

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Exception Note: EXC_CORPSE_NOTIFY 
Triggered by Thread: 0 

Last Exception Backtrace: 
0 CoreFoundation     0x184799900 __exceptionPreprocess + 124 (NSException.m:162) 
1 libobjc.A.dylib     0x183e07f80 objc_exception_throw + 56 (objc-exception.mm:531) 
2 UIKit       0x189db43a0 -[UIPopoverPresentationController presentationTransitionWillBegin] + 2884 (UIPopoverPresentationController.m:1197) 
3 UIKit       0x1897e82fc __71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke + 1640 (UIPresentationController.m:1136) 
4 UIKit       0x1897e6414 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 332 (UIPresentationController.m:704) 
5 UIKit       0x18973cb70 _runAfterCACommitDeferredBlocks + 292 (UIApplication.m:2312) 
6 UIKit       0x18974a030 _cleanUpAfterCAFlushAndRunDeferredBlocks + 92 (UIApplication.m:2290) 
7 UIKit       0x18947dc24 _afterCACommitHandler + 96 (UIApplication.m:2342) 
8 CoreFoundation     0x184750588 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 (CFRunLoop.c:1620) 
9 CoreFoundation     0x18474e32c __CFRunLoopDoObservers + 372 (CFRunLoop.c:1716) 
10 CoreFoundation     0x18474e75c __CFRunLoopRun + 928 (CFRunLoop.c:2558) 
11 CoreFoundation     0x18467d680 CFRunLoopRunSpecific + 384 (CFRunLoop.c:2814) 
12 GraphicsServices    0x185b8c088 GSEventRunModal + 180 (GSEvent.c:2245) 
13 UIKit       0x1894f4d90 UIApplicationMain + 204 (UIApplication.m:3681) 
14 MyCoolApp      0x100083564 0x10007c000 + 30052 
15 libdyld.dylib     0x18421e8b8 start + 4 (start_glue.s:80) 
+0

这与iPhone 6s设备上的3D触摸有关。真是不幸,因为据我所知,没有办法阻止它发生。我从Fabric.io中获取类似的报告来获取我的应用程序。 – brandonscript

+0

我只在iPad上收到它。你的用户告诉你什么? – dave234

+0

是的,抱歉应该澄清 - 它与3D触摸事件无关,它与处理3D触摸的iOS 9代码有关。没有任何用户的细节,但不幸的是。 – brandonscript

回答

3

所以问题结果是我有一个UIAlertController,我提出了错误的方式。这是造成这次事故的原因。

UIAlertController *alert = [UIAlertController alertControllerWithTitle:NULL message:NULL preferredStyle:UIAlertControllerStyleActionSheet]; 
[alert addAction:[UIAlertAction actionWithTitle:copyKey style:UIAlertActionStyleDefault handler:alerAction]]; 
[alert addAction:[UIAlertAction actionWithTitle:shareKey style:UIAlertActionStyleDefault handler:alerAction]]; 
[alert addAction:[UIAlertAction actionWithTitle:cancelKey style:UIAlertActionStyleCancel handler:alerAction]]; 

//THIS LINE CRASHED IT 
[self presentViewController:alert animated:1 completion:NULL]; 

我只是没有做足够的测试在iPad上,当我试图与它坠毁插入的调试器,给了我一个漫长的有用信息,这里是一个摘录:“你必须提供位置信息,这通过警报控制器的popoverPresentationController弹出“。所以这就是我现在如何展示它,它的工作原理。

[alert setModalPresentationStyle:UIModalPresentationPopover]; 

UIPopoverPresentationController *popPresenter = [alert popoverPresentationController]; 
popPresenter.sourceView = self.view; 
popPresenter.sourceRect = alertSourceRect; 
[self presentViewController:alert animated:YES completion:nil];