"从预期返回非空值的方法返回Null" with cellForRowAtIndexPath

时间:2016-09-06 19:20:32

标签: objective-c uitableview ios10

在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
    }
}

2 个答案:

答案 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告诉您自己在逻辑上犯了错误的方式。修正错误,不要将其用完。