Objective-c - 无法从其dataSource获取单元格

时间:2016-06-11 12:44:16

标签: ios tableview

我尝试以编程方式添加单元格,我在表格中有以下内容

 if (indexPath.section == AST_SF_SECTION_DATES) {

        if (indexPath.row == AST_SECOND_1) {

            cellIdentifier = @"DemoCell";
            if (cell == nil) {
            DemoCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
            cell = [[MY_BUNDLE loadNibNamed:cellIdentifier owner:self options:nil] firstObject];
            cell.label.text = @"I'm a label";
            }

        }

此外,我在属性检查器,.m和.h文件中都有xib和重用标识符。

我试过

[_tableView registerClass:[DemoCell self] forCellReuseIdentifier:@"DemoCell"];

在带有表的视图控制器的viewDidLoad中,但仍然存在错误

日志正在关注

*** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UITableView.m:7971
2016-06-11 13:55:13.768 SDKTemplate[14783:7920598] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x7ffb9c061c00; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7ffb9acab350>; layer = <CALayer: 0x7ffb9ac92450>; contentOffset: {0, -64}; contentSize: {375, 492.60000000149012}>) failed to obtain a cell from its dataSource (<ASTSearchForm: 0x7ffb9ac9f8f0>)'

我做错了什么?

2 个答案:

答案 0 :(得分:0)

据我所知,如果你想以编程方式添加新单元格,首先应该

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

第二,在表格视图数据源cellForRowAtIndexPath中,您应该正确返回新单元格

答案 1 :(得分:0)

此行不正确,请将其删除:

cell = [[MY_BUNDLE loadNibNamed:cellIdentifier owner:self options:nil] firstObject];

dequeueReusableCellWithIdentifier:forIndexPath always gives you a fully formed cell

  

具有关联重用标识符的UITableViewCell对象。此方法始终返回有效单元格。

     

如果您为指定的标识符注册了一个类并且必须创建一个新的单元格,则此方法通过调用其initWithStyle:reuseIdentifier:方法来初始化该单元格。对于基于nib的单元格,此方法从提供的nib文件加载单元格对象。如果现有单元可用于重用,则此方法将调用单元的prepareForReuse方法。

所以删除它,如果还有什么问题,这是你的错误注册。我们必须查看类代码和/或nib才能看到究竟是什么。但很可能只是使用dequeueReusableCellWithIdentifier给你的东西,你会很好。