0

UITableView があり、View Controller の 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 に移動すると、クラッシュします。

4

1 に答える 1

-1

インデックス 1 のオブジェクトを空の配列に挿入しようとしているようです。配列が空の場合、挿入できるインデックスは 0 だけです。インデックス値の計算方法を確認してください。

于 2012-10-12T21:09:27.433 に答える