iOS 9 push segue 导致我的应用程序崩溃
Posted
技术标签:
【中文标题】iOS 9 push segue 导致我的应用程序崩溃【英文标题】:iOS 9 push segue is causing my app to crash 【发布时间】:2015-08-20 21:41:02 【问题描述】:在 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
它看起来与我的代码没有任何关系,因为它发生在转换期间,而且我自己的函数都没有在调用堆栈中。
有没有人经历过这个,和/或知道如何解决这个问题?我在第二个视图控制器的每个函数中都设置了断点,但没有一个被命中。
【问题讨论】:
你找到解决办法了吗? 我在使用 xCode 7 - iOS 9 最终版本时遇到了同样的问题。 【参考方案1】:我确定这是错误。在我的情况下,它是指向 TabBarView 的。
performSegueWithIdentifier("tabSegue",sender: nil)
当它开始崩溃时(这种情况不时发生而不改变某人)我只是从情节提要中删除 segue 并重新创建它。它有效。
【讨论】:
【参考方案2】:有些人报告将 segue 指向 ViewController 而不是 NavigationController 可以解决问题。如果合适,您可以尝试该选项。
来源:https://forums.developer.apple.com/message/11153#11153
【讨论】:
【参考方案3】:此问题与在 .xib 文件中引用插座集合的设置无效有关。对于我的特定项目,它与将相同的 UIGestureRecognizer 添加到多视图的gestureRecognizer 集合有关。这在 ios 9 之前有效,但现在使用相同的堆栈跟踪使程序崩溃。如果您知道导致崩溃的视图控制器(听起来像您这样做,因为您能够重现崩溃),您应该能够在控制台中看到一个错误,告诉您发生了什么。如果不是,我会检查 .xib 文件中的每个引用插座集合并尝试找到导致错误的那个。
【讨论】:
【参考方案4】:它看起来像是程序而不是系统中的错误。请查看连接检查器,看看是否有任何意外的插座连接或断开的插座连接。
【讨论】:
【参考方案5】:为我修复:我使用自定义 segue 进行推送。当我用 show segue 替换自定义 segue 时,问题已修复。
【讨论】:
【参考方案6】:看起来这只是 Xcode 的一个问题。安装最终版本后我仍然遇到问题。我卸载了 Xcode 并从 App Store 重新安装,不再有问题了。感谢所有建议的答案!我之前肯定在 Storyboard 中遇到过糟糕的 segue 问题,但这次只是 Xcode。
【讨论】:
以上是关于iOS 9 push segue 导致我的应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
iOS Objective-C:如何从另一个类调用 Push Segue
iOS Push Segue(以编程方式)有时会卡住但不会崩溃
在 iOS7.1 中使用 show (push) segue 不会出现导航栏
应用程序崩溃整个设备在Segue上为iOS 9 + Xcode 7
iOS Storyboard Presenting Segues "relationship, embed, push, modal, custom" 类型