在viewDidLoad中调用时,UITableView endUpdates崩溃

时间:2012-10-11 11:33:37

标签: objective-c ios uiviewcontroller uitableview

我有一个UITableView,我想在我的视图控制器的viewDidLoad中修改它。 但UITableView不会在viewDidLoad中查询其dataSource,因此我首先调用reloadData,然后使用beginUpdates和endUpdates修改其单元格。 (在我的情况下,我只是删除一些单元格)。 但是当调用endUpdates时会抛出异常:

  

[__ NSArrayM insertObject:atIndex:]:索引1超出空数组的边界。

这个例外是什么意思? 我知道我正在向UITableView返回正确的数字,因为如果我在viewDidAppear之后调用它,它可以完美地工作,它在viewDidLoad中不起作用。

编辑:

这是我的代码

for (int i = 0; i < [customDataSource numberOfSectionsInTableView]; i ++) {
    NSInteger n = [customDataSource tableView:self numberOfRowsInSection:section];
    NSMutableArray* array = [[NSMutableArray alloc] initWithCapacity:n];
    for (NSInteger i = 0; i < n; i++)
        [array addObject:[NSIndexPath indexPathForRow:i inSection:section]];
    [super beginUpdates];
    [super deleteRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone];
    [super endUpdates];
}

当我将此代码从viewDidAppear移动到viewDidLoad或viewWillAppear时,它将崩溃。

1 个答案:

答案 0 :(得分:-1)

看起来您正在尝试将索引1处的对象插入到空数组中。如果数组为空,则唯一可接受的插入索引为0.检查如何计算索引值。