我正在尝试为我的表格视图实现insertRowsAtIndexPaths
。
在此实施之前,我曾经在用户点击表格结束后调用[self.tableView reloadData]
。这种方法对很多行和大量滚动影响了我的应用程序质量。(每次重新加载数据之前都会冻结)
所以我改用了这段代码:
p.lastid = appRecord.ids;
[p main];
dispatch_async(dispatch_get_main_queue(), ^(void)
{
[self.tableView beginUpdates];
NSArray *temp = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:[p.appRecordList count] inSection:0]];
[self.tableView insertRowsAtIndexPaths:temp withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView endUpdates];
});
});
}
return cell;
}
旧的工作代码是:
NSArray *temp =[self.entries arrayByAddingObjectsFromArray:p.appRecordList];
self.entries = temp;
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
p.appRecordList
是NSArray
,新的行项目来自hayoola fetch。
对于numberOfRowInSection
我使用此:
#define kCustomRowCount 10
@property (nonatomic, assign) int intindex;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSUInteger count = [self.entries count];
if (count == 0)
{
return kCustomRowCount;
}
return count;
}
我的代码中也没有cellforRowAtIndexPath
。
我应该提一下,我的程序每次都会从服务器获取10行。
这是控制台错误代码:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'尝试将第10行插入第0部分,但部分中只有10行更新'*
后为0
编辑:(因答案而改变)
将更新方法更改为:
[self.tableView beginUpdates];
NSArray *temp_1 =[self.entries arrayByAddingObjectsFromArray:p.appRecordList];
self.entries = temp_1;
NSArray *temp = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:[p.appRecordList count] inSection:0]];
[self.tableView insertRowsAtIndexPaths:temp withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView endUpdates];
和insertRowsAtIndexPaths
对此:
NSUInteger count = [self.entries count];
return count;
出现此错误:
因未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'无效更新:第0部分中的行数无效。包含的行数更新后的现有部分(20)必须等于更新前的该部分中包含的行数(10),加上或减去从该部分插入或删除的行数(插入1个,删除0个)以及或减去移入或移出该部分的行数(0移入,0移出)。'*
答案 0 :(得分:1)
您需要确保在致电self.entries
之前已将其他记录添加到endUpdates
。例外情况是告诉您,您尝试添加第11行,但numberOfRowsInSection
返回10
您需要确保插入与添加到数组中的元素相同的行数
您的更新方法应为
[self.tableView beginUpdates];
NSMutableArray *newIndices=[NSMutableArray new];
for (id record in p.appRecordList) {
[self.entries addObject:record];
[newIndicies addObject:[NSIndexPath indexPathForRow:self.entries.count]];
}
[self.tableView insertRowsAtIndexPaths:newIndices withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView endUpdates];