iOS 9推送segue导致我的应用程序崩溃

时间:2015-08-20 21:41:02

标签: ios segue uistoryboardsegue ios9 xcode7-beta5

在iOS 8.4,模拟器和手机中,我的performSegue调用没有遇到任何问题,但是当在Xcode 7 beta 5上使用模拟器时,当执行performSegue调用时,它会崩溃。调用堆栈位于下方。

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM insertObject:atIndex:]: index 3 beyond bounds [0 .. 1]'
*** First throw call stack:
(
0   CoreFoundation                      0x00000001137509b5 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x00000001131c8deb objc_exception_throw + 48
2   CoreFoundation                      0x00000001136179d5 -[__NSArrayM insertObject:atIndex:] + 901
3   Foundation                          0x0000000110c42aa1 -[NSKeyValueSlowMutableArray insertObject:atIndex:] + 106
4   CoreFoundation                      0x000000011366beb2 -[NSMutableArray insertObjects:count:atIndex:] + 162
5   CoreFoundation                      0x000000011366bc1f -[NSMutableArray insertObjectsFromArray:range:atIndex:] + 335
6   CoreFoundation                      0x000000011366baa3 -[NSMutableArray addObjectsFromArray:] + 723
7   UIKit                               0x00000001119ef467 -[UIRuntimeOutletCollectionConnection performConnect] + 860
8   CoreFoundation                      0x0000000113691590 -[NSArray makeObjectsPerformSelector:] + 224
9   UIKit                               0x000000011173ccaa -[UINib instantiateWithOwner:options:] + 1864
10  UIKit                               0x0000000111531df4 -[UIViewController _loadViewFromNibNamed:bundle:] + 381
11  UIKit                               0x0000000111532720 -[UIViewController loadView] + 178
12  UIKit                               0x0000000111532a22 -[UIViewController loadViewIfRequired] + 138
13  UIKit                               0x0000000111538e33 -[UIViewController __viewWillAppear:] + 120
14  UIKit                               0x0000000111565cba -[UINavigationController _startCustomTransition:] + 1177
15  UIKit                               0x00000001115752f7 -[UINavigationController _startDeferredTransitionIfNeeded:] + 712
16  UIKit                               0x00000001115761ad -[UINavigationController __viewWillLayoutSubviews] + 57
17  UIKit                               0x00000001117082d1 -[UILayoutContainerView layoutSubviews] + 248
18  UIKit                               0x0000000111459a3b -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 710
19  QuartzCore                          0x00000001110f336a -[CALayer layoutSublayers] + 146
20  QuartzCore                          0x00000001110e7bd0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
21  QuartzCore                          0x00000001110e7a4e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
22  QuartzCore                          0x00000001110dc1d5 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277
23  QuartzCore                          0x00000001111099f0 _ZN2CA11Transaction6commitEv + 508
24  UIKit                               0x00000001113d5eb0 _afterCACommitHandler + 174
25  CoreFoundation                      0x000000011367c457 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
26  CoreFoundation                      0x000000011367c3c7 __CFRunLoopDoObservers + 391
27  CoreFoundation                      0x000000011367201b __CFRunLoopRun + 1147
28  CoreFoundation                      0x0000000113671918 CFRunLoopRunSpecific + 488
29  GraphicsServices                    0x0000000115ee3ad2 GSEventRunModal + 161
30  UIKit                               0x00000001113ac99e UIApplicationMain + 171
31  MyApp                               0x000000010fbfe59f main + 111
32  libdyld.dylib                       0x000000011429c92d start + 1
33  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

它看起来与我的代码无关,因为它在转换过程中发生,而且我自己的函数都没有在调用堆栈中。

有没有人经历过这个,和/或知道如何解决这个问题?我在第二个视图控制器的每个函数中都放置了断点,但没有一个被击中。

6 个答案:

答案 0 :(得分:3)

我确定这是错误。在我的情况下,它是segue指向TabBarView。

 performSegueWithIdentifier("tabSegue",sender: nil)

当它开始崩溃时(这种情况发生的次数没有改变某些情况)我只是从故事板中删除segue并将其创建回来。它有效。

答案 1 :(得分:0)

有些人报告说,将segue指向ViewController而不是NavigationController可以解决问题。如果适合,您可以尝试该选项。

来源:https://forums.developer.apple.com/message/11153#11153

答案 2 :(得分:0)

此问题与.xib文件中引用插座集合的无效设置有关。对于我的特定项目,它与将相同的UIGestureRecognizer添加到多个视图的gestureRecognizer集合相关。这在ios 9之前有效,但现在使用相同的堆栈跟踪崩溃程序。如果您知道导致崩溃的视图控制器(听起来像是因为您能够重现崩溃),您应该能够在控制台中看到错误,告诉您发生了什么。如果不是,我会检查.xib文件中的每个Referencing Outlet Collection,并尝试找到导致错误的那个。

答案 3 :(得分:0)

它看起来像程序中的错误而不是系统。请查看连接检查器,看是否有任何意外的插座连接或插座连接断开。

答案 4 :(得分:0)

修复我:我使用自定义segue进行推送。当我用show segue问题替换自定义segue时固定。

答案 5 :(得分:0)

看起来这只是Xcode的一个问题。安装最终版本后我仍然遇到问题。我卸载了Xcode并从App Store重新安装,并且不再有问题了。感谢所有建议的答案!我之前肯定在Storyboard中遇到了一个错误的segue问题,但这一次,它只是Xcode。