我有一个UITableView,其中C ++对象是数据源,因此没有任何类型的NSArray。每当我想在现有列表的末尾插入一行
时,我就会崩溃Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]
它在[tableView endUpdates]上崩溃了。但是我的实现中没有任何NSArray或任何调用objectAtIndex的代码。我不知道为什么我会崩溃。
我只有一个部分,并且总是将新行添加到第0部分的末尾。返回的行数是正确的,因此完全同步。
在我看到的日志中,[tableView endUpdates]调用numberOfRowsInSection,它正确返回先前计数加1的计数。但是,它再也没有调用cellForRowAtIndexPath而无法通过[tableView endUpdates];
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"...");
........
NSArray *insertIndexPaths = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:oldCount + i inSection:[indexPath section]], nil];
NSLog(@"Insert: %d %d %d", i, (int) oldCount, (int) newCount);
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
int i = _reader->allRead() ? _reader->getWindowCount() : _reader->getWindowCount() + 30;
return i;
}
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
// return __results__ ? 1 : 0;
}
答案 0 :(得分:0)
在更新tableview时,您还必须更新数据源。 在您的代码中没有显示数据源更新方法,所以我认为应该考虑到这一点。
答案 1 :(得分:0)
尝试使用[[self tableView] reloadData]
代替[[self tableView] endUpdates]