我尝试以编程方式添加单元格,我在表格中有以下内容
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>)'
我做错了什么?
答案 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
给你的东西,你会很好。