获取崩溃不能将自己添加为ios中的子视图

时间:2014-10-01 10:51:45

标签: ios objective-c iphone

崩溃后无法重现。

我已经处理过这样的情况:当一个viewcontroller动画时,不会对viewcontroller进行segue。此处提到的类似问题:iOS app error - Can't add self as subview。我已经实施了this安全隔离解决方案。

我仍然在跟踪崩溃。

注意:在iOS 7和8上都会崩溃,但iOS 8会出现更多崩溃。(如果这有帮助)。即使从viewDidLoad中删除,也不会在模拟器中崩溃。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview'

Application Specific Backtrace 1:
0   CoreFoundation                      0x24503f87 <redacted> + 126
1   libobjc.A.dylib                     0x31c62c77 _objc_exception_throw + 38
2   CoreFoundation                      0x24503ecd -[NSException initWithCoder:] + 0
3   UIKit                               0x279880b3 -[UIView _addSubview:positioned:relativeTo:] + 114
4   UIKit                               0x27988037 -[UIView addSubview:] + 30
5   UIKit                               0x27b4d491 <redacted> + 1236
6   UIKit                               0x2798e701 +[UIView performWithoutAnimation:] + 72
7   UIKit                               0x27b4cd79 -[_UINavigationParallaxTransition animateTransition:] + 808
8   UIKit                               0x27b0b787 -[UINavigationController _startCustomTransition:] + 2854
9   UIKit                               0x27a2ab2f -[UINavigationController _startDeferredTransitionIfNeeded:] + 422
10  UIKit                               0x27a2a931 -[UINavigationController __viewWillLayoutSubviews] + 44
11  UIKit                               0x27a2a8c9 -[UILayoutContainerView layoutSubviews] + 184
12  UIKit                               0x2797f25f -[UIView layoutSublayersOfLayer:] + 514
13  QuartzCore                          0x273aa1d5 -[CALayer layoutSublayers] + 136
14  QuartzCore                          0x273a5bd1 <redacted> + 360
15  QuartzCore                          0x273a5a59 <redacted> + 16
16  QuartzCore                          0x273a5447 <redacted> + 222
17  QuartzCore                          0x273a5251 <redacted> + 324
18  UIKit                               0x27980c31 <redacted> + 1384
19  CoreFoundation                      0x244ca807 <redacted> + 14
20  CoreFoundation                      0x244c9c1b <redacted> + 222
21  CoreFoundation                      0x244c8299 <redacted> + 768
22  CoreFoundation                      0x24415db1 _CFRunLoopRunSpecific + 476
23  CoreFoundation                      0x24415bc3 _CFRunLoopRunInMode + 106
24  GraphicsServices                    0x2b7a0051 _GSEventRunModal + 136
25  UIKit                               0x279e0f01 _UIApplicationMain + 1440

1 个答案:

答案 0 :(得分:1)

很抱歉这次聚会迟到了。我最近有这个问题,我的导航栏因为同时推送多个视图控制器而进入损坏状态。发生这种情况是因为在第一个视图控制器仍处于动画状态时按下了另一个视图控制器。从here

的非常用答案中提示

我想出了一个适用于我的简单解决方案。您只需要子类UINavigationController并覆盖pushViewController方法并检查以前的视图控制器动画是否已完成。您可以通过将您的班级设为UINavigationControllerDelegate的代表并将代理设置为self来听取动画完成情况。

我上传了一个要点here,以简化操作。

请确保将此新类设置为故事板中的NavigationController。