NSGenericException: этот кодировщик требует, чтобы замененные объекты были возвращены из initWithCoder

#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)
}