#ios #swift #uistoryboardsegue
#iOS #swift #uistoryboardsegue
Вопрос:
Вчера я просто отлично запускал свое приложение для iPhone. Сегодня я получаю этот сбой:
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'
Это происходит при переходе от одного представления к другому с помощью раскадровки segue (также пробовал это программно). Контроллер представления назначения — это UITableViewController, в котором нет ничего странного. Я откатил свой код, чтобы проверить, изменилось ли что-нибудь, что вызывает этот сбой, но ничего. Последняя тестовая сборка, которую я сделал, все еще отлично работает с тем же кодом.
У кого-нибудь есть идеи, что может быть не так? У меня закончились идеи.
Это трассировка стека:
0 CoreFoundation 0x0000000107f176fb __exceptionPreprocess 331
1 libobjc.A.dylib 0x0000000106f0bac5 objc_exception_throw 48
2 CoreFoundation 0x0000000107f17555 [NSException raise:format:] 197
3 UIFoundation 0x000000010d3fe89c UINibDecoderDecodeObjectForValue 827
4 UIFoundation 0x000000010d3feaf9 UINibDecoderDecodeObjectForValue 1432
5 UIFoundation 0x000000010d3fe554 -[UINibDecoder decodeObjectForKey:] 251
6 UIKitCore 0x000000010f4b0330 -[UIViewController initWithCoder:] 1021
7 UIKitCore 0x000000010f4a52ab -[UITableViewController initWithCoder:] 59
8 Tankey 0x0000000100c8ede4 $s6Tankey25BaseUITableViewControllerC5coderACSgSo7NSCoderC_tcfc 148
9 Tankey 0x0000000100c8ee8f $s6Tankey25BaseUITableViewControllerC5coderACSgSo7NSCoderC_tcfcTo 47
10 Tankey 0x0000000100bcd3fc $s6Tankey19ShareViewControllerC5coderACSgSo7NSCoderC_tcfc 1260
11 Tankey 0x0000000100bcd4bf $s6Tankey19ShareViewControllerC5coderACSgSo7NSCoderC_tcfcTo 47
12 UIKitCore 0x000000010f7354f9 -[UIClassSwapper initWithCoder:] 246
13 UIFoundation 0x000000010d3fe852 UINibDecoderDecodeObjectForValue 753
14 UIFoundation 0x000000010d3fe554 -[UINibDecoder decodeObjectForKey:] 251
15 UIKitCore 0x000000010f739b41 -[UIRuntimeConnection initWithCoder:] 178
16 UIKitCore 0x000000010f739ee2 -[UIRuntimeEventConnection initWithCoder:] 59
17 UIFoundation 0x000000010d3fe852 UINibDecoderDecodeObjectForValue 753
18 UIFoundation 0x000000010d3feaf9 UINibDecoderDecodeObjectForValue 1432
19 UIFoundation 0x000000010d3fe554 -[UINibDecoder decodeObjectForKey:] 251
20 UIKitCore 0x000000010f7373f1 -[UINib instantiateWithOwner:options:] 1216
21 UIKitCore 0x000000010fc4fc60 -[UIStoryboard instantiateViewControllerWithIdentifier:] 181
22 UIKitCore 0x000000010fc507fb -[UIStoryboardSegueTemplate instantiateOrFindDestinationViewControllerWithSender:] 90
23 UIKitCore 0x000000010fc50a3f -[UIStoryboardSegueTemplate _perform:] 52
24 UIKitCore 0x000000010f4b854b -[UIViewController performSegueWithIdentifier:sender:] 99
25 UIKit 0x0000000127bdeec1 -[UIViewControllerAccessibility performSegueWithIdentifier:sender:] 102
26 Tankey 0x0000000100affb30 $s6Tankey22SettingsViewControllerC05tableC0_14didSelectRowAtySo07UITableC0C_10Foundation9IndexPathVtF 1280
27 Tankey 0x0000000100b0047e $s6Tankey22SettingsViewControllerC05tableC0_14didSelectRowAtySo07UITableC0C_10Foundation9IndexPathVtFTo 158
28 UIKitCore 0x000000010fcd2419 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] 1810
29 UIKitCore 0x000000010fcd262d -[UITableView _userSelectRowAtPendingSelectionIndexPath:] 337
30 UIKitCore 0x000000010fac2cc9 _runAfterCACommitDeferredBlocks 318
31 UIKitCore 0x000000010fab2199 _cleanUpAfterCAFlushAndRunDeferredBlocks 358
32 UIKitCore 0x000000010fadf32b _afterCACommitHandler 124
33 CoreFoundation 0x0000000107e7e0f7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 23
34 CoreFoundation 0x0000000107e785be __CFRunLoopDoObservers 430
35 CoreFoundation 0x0000000107e78c31 __CFRunLoopRun 1505
36 CoreFoundation 0x0000000107e78302 CFRunLoopRunSpecific 626
37 GraphicsServices 0x000000010d0a22fe GSEventRunModal 65
38 UIKitCore 0x000000010fab7ba2 UIApplicationMain 140
39 Tankey 0x0000000100aee518 main 72
40 libdyld.dylib 0x000000010958f541 start 1
41 ??? 0x0000000000000001 0x0 1
Ответ №1:
Я заметил, что Xcode был обновлен за время между работой приложения и сбоем приложения. Я откатился с Xcode 10.2 на 10.1, и теперь сбой исчез, приложение работает нормально.
Откат был обходным путем, а не исправлением.
Проблема была в модуле, который я использовал (называемом Inputmask), проблема тем временем устранена в модуле, и теперь все работает нормально с Xcode 10.2.
Комментарии:
1. Каким было решение внутри модуля?
2. @TomSpee, хороший улов. @Imakemymark — решение в модуле находится здесь — github.com/RedMadRobot/input-mask-ios/commit / … но решение для проекта — просто запустить
pod update
Ответ №2:
Спасибо, Том Спи, за то, что сэкономил так много моего времени.
У меня была точно такая же проблема. Я просто использовал carthage вместо cocoapods.
Проблема присутствовала в библиотеке InputMask версии 4.1.0, и проблема была исправлена в ее версии 4.1.1
Для получения дополнительной информации о фиксации, которая исправила сбой, вот ссылка:https://github.com/RedMadRobot/input-mask-ios/commit/c2f0d9bcc49567a6c0bcc4173dd410a969fcc423
Ответ №3:
В большинстве случаев реальное исправление заключается в следующем. Помните, чтобы не возвращать nil в приведенном ниже инициализаторе:
required init?(coder: NSCoder) {
super.init(coder: coder)
}