在iOS 10下,这个新警告会被抛出。
在方法无法确定要返回的适当单元格(例如异常)的情况下,从cellForRowAtIndexPath返回的适当方法是什么?
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(tableView == self.selectedContentTableView) {
// make cell...
return cell;
}
else if(tableView == self.recipientTableView) {
// make cell...
return cell;
}
else {
NSLog(@"Some exception message for unexpected tableView");
return nil; // ??? what now instead
}
}
答案 0 :(得分:4)
如果这种情况是编程错误,则不应该发生, 然后适当的操作是终止程序并出错 消息,以便检测到编程错误并可以修复:
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(tableView == self.selectedContentTableView) {
// make cell...
return cell;
}
else if(tableView == self.recipientTableView) {
// make cell...
return cell;
}
else {
NSLog(@"Some exception message for unexpected tableView");
abort();
}
}
abort()
功能标有__attribute__((noreturn))
,
因此编译器不会抱怨丢失
返回值。
答案 1 :(得分:0)
没有适当的值返回,因为情况是100%程序员错误。最好为预期的情况(不同的表格视图,基于模型数据的不同单元格类型等)编写代码,并让任何未处理的情况下降并自然地返回nil
。检查此类情况只是故意隐藏错误来加剧错误。
Apple关于Objective-C异常的理念是它们用于表示程序员错误。当UITableView
返回tableView:cellForRowAtIndexPath:
时,nil
抛出异常是UIKit告诉您自己在逻辑上犯了错误的方式。修正错误,不要将其用完。