UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath / Assertion失败消息

时间:2012-03-01 05:53:12

标签: uitableview

使用带有以下代码的自定义UITableViewCell实现UITableView

    @interface ProfileSaveViewController : UITableViewController
     {
         UITableViewCell *cell0;
         UITableViewCell *cell1;
         UITableViewCell *cell2;
         UILabel *cell2Label;
     }

    @property (nonatomic, retain) IBOutlet UITableViewCell *cell0;
    @property (nonatomic, retain) IBOutlet UITableViewCell *cell1;
    @property (nonatomic, retain) IBOutlet UITableViewCell *cell2;
    @property (nonatomic, retain) IBOutlet UILabel *cell2Label;

    @end

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:               (NSIndexPath*)indexPath
  {
        if([indexPath row] == 0) return cell0;
        if([indexPath row] == 1) return cell1;
        if([indexPath row] == 2) return cell2;   
        return nil;
  }

运行应用程序时出现以下消息。

*断言失败 - [UITableView _createPreparedCellForGlobalRow:withIndexPath:],/ SourceCache / UIKit_Sim / UIKit-1912.3 / UITableView.m:6072 2012-03-01 11:11:31.984 TestSplitView [765:f803] * 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:'

5 个答案:

答案 0 :(得分:8)

您被要求提供一个单元格并返回nil(或者其他不是UITableViewCell的内容)。就是这么简单。

我看到两种可能性:

  • 您将从tableView:numberOfRowsInSection:返回大于3的数字。不。

  • 您的一个或多个cell#个商店没有连接到您的笔尖,或者没有连接到UITableViewCell(或子类)。把它们搞好。

答案 1 :(得分:4)

如果您使用的是自定义UITableViewCell,也可能忘记在“Utilites端”识别“Identifier” - > “属性检查器”选项卡。

希望这有帮助。

答案 2 :(得分:1)

答案 3 :(得分:0)

/* Dynamic Prototype cell in UITableView */

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView ==tblUser) {
        switch (indexPath.row)
        {
            case 0:
                return Cell_0;
                break;
            case 1:
                return Cell_1;
                break;
            case 2:
                return Cell_2;
                break;
            case 3:
                return Cell_3;
                break;
            case 4:
                return Cell_4;
                break;
            case 5:
                return Cell_04;
                break;
            case 6:
                return Cell_5;
                break;
            case 7:
                return Cell_6;
                break;
            case 8:
                return Cell_7;
                break;
            default:
                return nil;
                break;
        }
    }else
return nil
}

答案 4 :(得分:0)

您应该检查tableview数据源方法的行数。确保

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return 3;
}

如果返回的内容更多,则cellForRow将返回nil,由于断言失败,因此tableview数据源期望UITableViewCell实例。