iOS 9 push segue вызывает сбой моего приложения
В iOS 8.4, симуляторе и телефоне у меня не возникает проблем с моим вызовом executeSegue, но при использовании симулятора в Xcode 7 beta 5, когда выполняется вызов executeSegue, происходит сбой. Стек вызовов ниже.
*** 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 ответов
Я уверен, что это ошибка. В моей ситуации это было указано на TabBarView.
performSegueWithIdentifier("tabSegue",sender: nil)
Когда он начинает падать (это происходит время от времени без изменения sb), я просто удаляю segue из раскадровки и создаю его обратно. И это работает.
Похоже, ошибка в программе, а не в системе. Пожалуйста, взгляните на инспектор соединений, чтобы увидеть, есть ли непредвиденное соединение или сломанное соединение.
Эта проблема связана с неверной настройкой со ссылкой на коллекцию розеток в файле.xib. для моего конкретного проекта это было связано с добавлением одного и того же UIGestureRecognizer в коллекцию gestRecognizer нескольких представлений. Это работало до ios 9, но теперь вылетает программа с идентичной трассировкой стека. Если вы знаете контроллер представления, который вызывает сбой (и звучит так, как будто вы это делаете, потому что вы можете воспроизвести сбой), вы должны увидеть ошибку в консоли, сообщающую вам, что происходит. Если нет, я бы изучил каждую коллекцию исходящих ссылок в файле.xib и попытался найти тот, который вызывает ошибку.
Исправление для меня: я использовал собственный переход для толчка. Когда я заменил пользовательский Segue на шоу, Segue проблема исправлена.
Некоторые люди сообщают, что указание перехода к ViewController вместо NavigationController решает проблему. Вы можете попробовать этот вариант, если он подходит.
Похоже, это была просто проблема с Xcode. У меня все еще была проблема после установки финальной версии. Я удалил Xcode и переустановил из App Store, и у меня больше не было проблем. Спасибо за все предложенные ответы, хотя! У меня определенно была проблема плохой передачи в раскадровке, но на этот раз это был просто Xcode.