EXC_BAD_ACCESS on presentViewController:animated:completion



这两天我一直在尝试解决这个问题。无法理解为什么我的应用程序崩溃。

我正在使用JASidePanel库在我的应用程序中实现面板效果。左侧面板是一个表格视图,类似于中央面板的导航指南。在一种情况下,当在左侧面板中选择特定选项时(当它打开时),中央面板应该只是关闭左侧面板并显示另一个导航控制器(具有一致的)根视图控制器。但是,有时此转换会使我的应用程序崩溃。

我观察到崩溃没有发生在JASidePanel的代码或我的中央面板视图控制器代码([self presentViewController:self.cityNavigationController animated:YES completion:nil];)。我清楚地观察到,由于iOS框架,由于某些内部崩溃,该应用程序崩溃了,我逐条指令地浏览了每条指令并弄清楚了这一点。

但是,我仍然认为我做错了什么。谁能告诉我为什么会发生这种崩溃?我应该寻找什么来解决此问题?我可以/应该遵循任何步骤或程序来检测问题?

任何帮助,不胜感激。

设备日志:

Thread 0 Crashed:
0   libobjc.A.dylib                 0x3a085b26 objc_msgSend + 6
1   UIKit                           0x3257c788 -[UISearchBar _didMoveFromWindow:toWindow:] + 152
2   UIKit                           0x3249a576 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 662
3   UIKit                           0x3249a576 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 662
4   UIKit                           0x324bb5e2 -[UIScrollView _didMoveFromWindow:toWindow:] + 46
5   UIKit                           0x3249a576 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 662
6   UIKit                           0x3249a576 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 662
7   UIKit                           0x3249a576 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 662
8   UIKit                           0x3249a576 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 662
9   UIKit                           0x32499e68 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 108
10  Foundation                      0x30688d98 -[NSISEngine withBehaviors:performModifications:] + 208
11  UIKit                           0x32499cf2 -[UIView(Hierarchy) _postMovedFromSuperview:] + 294
12  UIKit                           0x324a6998 -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1400
13  UIKit                           0x324a6412 -[UIView(Hierarchy) addSubview:] + 26
14  UIKit                           0x32587d8a -[UITransitionView transition:fromView:toView:removeFromView:] + 974
15  UIKit                           0x32587998 -[UIViewControllerBuiltinTransitionViewAnimator animateTransition:] + 444
16  UIKit                           0x32587406 __101-[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:animation:]_block_invoke_2 + 1250
17  UIKit                           0x3251afb6 _applyBlockToCFArrayCopiedToStack + 314
18  UIKit                           0x324931ee _afterCACommitHandler + 426
19  CoreFoundation                  0x2fcf31ca __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
20  CoreFoundation                  0x2fcf0b6c __CFRunLoopDoObservers + 280
21  CoreFoundation                  0x2fcf0eae __CFRunLoopRun + 726
22  CoreFoundation                  0x2fc5bc22 CFRunLoopRunSpecific + 518
23  CoreFoundation                  0x2fc5ba06 CFRunLoopRunInMode + 102
24  GraphicsServices                0x3493a27e GSEventRunModal + 134
25  UIKit                           0x324ff044 UIApplicationMain + 1132
26  Housing India                   0x000a2606 main (main.m:16)
27  libdyld.dylib                   0x3a592ab4 start + 0

好吧,如果对任何人来说这有帮助。

问题出在iOS框架上。问题出在UINavigationController的实现上。崩溃发生在框架本身内部。唯一可能的出路是每次在呈现导航控制器之前实例化它。这会降低性能,但别无选择。苹果,确实有很多限制和假设。:P

说明:我们需要呈现一个带有模态动画的导航控制器。我们试图通过实例化一次并尝试重用它来避免一次又一次地实例化导航控制器。但是,正因为如此,我们观察到某个时候发生了崩溃。不完全知道崩溃意味着什么,但通过一次又一次地实例化它来修复它。

最新更新