我的应用程序在iOS 11.2上运行良好,但在iOS 11.3中崩溃了。我得到了例外
由于未捕获的异常'NSGenericException'而终止应用程序,原因:'此编码器要求从initWithCoder返回替换的对象
我有一个带有tableView的viewController,这个tableView有两个单元格,这个表视图无法在cellForRowAtIndexPath方法中加载一个单元格。
LPDiscoverFeedCell *cell = (LPDiscoverFeedCell *)[tableView dequeueReusableCellWithIdentifier:checkPortrait];
这是我得到这个的例外点。
答案 0 :(得分:2)
将xcode从10.0更新为10.2.1后,我开始看到此崩溃
该问题出现在4.1.0版的“ InputMask”库中,并且该问题已在其4.1.1版中得到修复。我正在使用迦太基,因此,我要做的就是运行迦太基更新命令
有关已修复崩溃的提交的更多信息,请参见以下链接:
NSGenericException: This coder requires that replaced objects be returned from initWithCoder
答案 1 :(得分:0)
您是否注册了LPDiscoverFeedCell
?如果没有,请试试这个,
选项1
[self.tableView registerClass:[LPDiscoverFeedCell class] forCellReuseIdentifier:@"checkPortrait"];
选项2
UINib *feedCell = [UINib nibWithNibName:@"LPDiscoverFeedCell" bundle:nil];
[self.tableView registerNib:feedCell forCellReuseIdentifier:@"checkPortrait"];
看看这是否能解决问题。
答案 2 :(得分:0)
Xcode 10.2更新了具有新功能的编译器:
“为了减少Swift元数据占用的大小,现在,在Swift中定义的便捷初始化程序正在调用Objective-C中定义的指定初始化程序时,才提前分配一个对象。在大多数情况下,这对您的应用程序,但是如果便捷的初始化程序是从Objective-C调用的,而又没有通过self.init委托给暴露给Objective-C的初始化程序,则释放alloc的初始分配而不会调用任何初始化程序。对于不希望发生任何对象替换的初始化程序用户而言,这是一个问题,例如initWithCoder :::如果调用initWithCoder:的Swift实现,则NSKeyedUnarchiver的实现可能会出现错误的行为:周期。 为避免这种情况,请确保不支持对象替换的便捷初始化程序始终委托给也暴露于Objective-C的初始化程序,这是因为它们是在Objective-C中定义的,或者因为它们被标记为@objc,或者因为它们覆盖了暴露给Objective-C的初始化程序,或者因为它们满足@objc协议的要求。 (46823518)” https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_release_notes/swift_5_release_notes_for_xcode_10_2?language=objc
我在Storyboard场景中使用了MyClass:
如果MyClass具有方便的init()来调用指定的初始化程序,则应使用@objc进行标记:
class MyClass: NSObject {
override convenience init() {
self.init(int: 42)
}
// Add @objc to stop crashes
@objc init(int: Int) {
super.init()
}
}