当我没有任何数组时,为什么endUpdates在数组超出范围时崩溃?

时间:2012-04-07 11:41:23

标签: iphone objective-c

我有一个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;
}

2 个答案:

答案 0 :(得分:0)

在更新tableview时,您还必须更新数据源。 在您的代码中没有显示数据源更新方法,所以我认为应该考虑到这一点。

答案 1 :(得分:0)

尝试使用[[self tableView] reloadData]代替[[self tableView] endUpdates]