iOS 11.3应用崩溃报NSGenericException,TableView无法加载Cell求助
我之前也踩过这个坑!iOS 11.2上运行得好好的,一升级到11.3就直接崩在TableView加载Cell这,跟你报的异常完全一致。核心原因是iOS 11.3对XIB/Storyboard中Cell的初始化逻辑做了更严格的校验,当你的Cell子类重写了initWithCoder:但没有正确返回初始化后的对象时,就会触发这个NSGenericException。
下面是具体的解决步骤:
1. 检查Cell子类的initWithCoder:实现
你的LPDiscoverFeedCell或者另一种Cell子类里,大概率是重写了initWithCoder:方法,但写法不符合iOS 11.3+的要求。请确保:
- 必须调用父类的
initWithCoder:方法,并且返回它的结果(或者直接返回self,前提是父类方法已经完成初始化) - 正确的示例代码:
- (instancetype)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; if (self) { // 这里放你的自定义初始化逻辑,比如设置默认样式、绑定控件等 } return self; }
如果你的代码里漏掉了[super initWithCoder:coder],或者没有返回self,iOS 11.3+就会判定你没有正确返回替换对象,直接抛出崩溃。
2. 校验复用标识符的一致性
还要确认cellForRowAtIndexPath中使用的复用标识符,和XIB/Storyboard里给Cell设置的完全一致(包括大小写)。虽然iOS 11.2对大小写不敏感,但11.3之后的校验更严格,标识符不匹配可能间接导致Cell加载失败,触发类似异常。
3. 检查Cell的注册逻辑(如果用代码注册)
如果你是通过代码注册Cell(比如registerNib:forCellReuseIdentifier:或registerClass:forCellReuseIdentifier:),要确保注册的Nib/Class和dequeueReusableCellWithIdentifier:里用的标识符一一对应。比如不能注册了LPDiscoverFeedCell的Nib,却用另一个标识符去获取Cell。
4. 确认XIB中Cell的Class设置
打开Cell对应的XIB文件,在"Identity Inspector"面板里检查Class是不是正确设置为LPDiscoverFeedCell(或对应的子类)。如果误设成了父类UITableViewCell,也可能导致初始化时出现异常。
内容的提问来源于stack exchange,提问作者hemraj shaqawal

