NSGenericException:此编码器要求从 initWithCoder 返回替换的对象

Posted

技术标签:

【中文标题】NSGenericException:此编码器要求从 initWithCoder 返回替换的对象【英文标题】:NSGenericException: This coder requires that replaced objects be returned from initWithCoder 【发布时间】:2019-03-28 10:32:47 【问题描述】:

昨天我的 iPhone 应用程序运行良好。今天我遇到了这个崩溃:

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'

当使用 storyboard 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,现在崩溃消失了,应用程序运行正常。

回滚是一种解决方法,而不是修复方法。

问题出在我使用的一个 pod(称为 Inputmask)中,同​​时该问题已在该 pod 中修复,现在在 Xcode 10.2 中一切正常。

【讨论】:

吊舱内的解决方案是什么? @TomSpee,很好。 @Imakemymark - 吊舱内的解决方案在这里 - github.com/RedMadRobot/input-mask-ios/commit/… 但项目的解决方案是简单地运行 pod update【参考方案2】:

感谢 Tom Spee 为我节省了这么多时间。

我遇到了完全相同的问题。我只是在使用 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)

【讨论】:

以上是关于NSGenericException:此编码器要求从 initWithCoder 返回替换的对象的主要内容,如果未能解决你的问题,请参考以下文章

NSGenericException',原因:'无法在视图上安装约束

此编码器要求从 initWithCoder 返回替换的对象:'

未捕获的异常 'NSGenericException: 应用程序提供了一个 UIAlertController 样式的 UIAlertControllerStyleActionSheet

在 iOS10 中使用 AVCapturePhotoOutput - NSGenericException

NSGenericException',原因:'无法在视图上安装约束

*** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“开始日期不能晚于结束日期!”