5

私はxmlファイルを解析し、その解析された値をテーブルビューに入れています.テーブルビューにはセクションが1つしかありません.しかし、次の例外が発生しています:

2013-10-14 15:21:57.250 tableview[6068:907] * -[UITableView _endCellAnimationsWithContext:] でのアサーションの失敗、/SourceCache/UIKit/UIKit-2380.17/UITableView.m:909 2013-10-14 15:22: 11.227 テーブルビュー[6068:907]キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: '行 0 をセクション 0 に挿入しようとしましたが、更新後にセクション 0 に行が 0 行しかありません' lib8cabidy6 をスローする例外:

コードは次のとおりです。

/**
 The NSOperation "ParseOperation" calls addFiles: via NSNotification, on the main thread which in turn calls this method, with batches of parsed objects. The batch size is set via the kSizeOfEarthquakeBatch constant.
 */
- (void)addFilesToList:(NSArray *)files {

    NSInteger startingRow = [self.fileList count];
    NSLog(@"STARTING ROW:%d",startingRow);
    NSInteger fileCount = [files count];
    NSLog(@"FILE COUNT : %d",fileCount);
    NSMutableArray *indexPaths = [[NSMutableArray alloc] initWithCapacity:fileCount];
    NSLog(@"INDEX PATHS:%@",indexPaths);
    for (NSInteger row = startingRow; row < (startingRow + fileCount); row++) {
        NSLog(@"into for");

        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
        NSLog(@"INDEXPAth %@",indexPath);
        [indexPaths addObject:indexPath];
    }

    [self.fileList addObjectsFromArray:files];
    NSLog(@"ADD objects");
    NSLog(@"FILELIST:%@",self.fileList);

    //GETTING EXCEPTION AT THIS LINE

    [self.tableview insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic]; 
}


#pragma mark - UITableViewDelegate\

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

// The number of rows is equal to the number of earthquakes in the array.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [self.fileList count];
    NSLog(@"NUMBER OF ROWS :%d",[self.fileList count]);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *kFileCellID = @"Cell";
    myTableCell *cell = (myTableCell *)[tableView dequeueReusableCellWithIdentifier:kFileCellID];

    // Get the specific earthquake for this row.
    fileList *file = (self.fileList)[indexPath.row];

    [cell configureWithFile:file];
    return cell;
}
4

3 に答える 3

12

何が起こっているかというと、新しいセルを追加しているテーブルビューは、self.fileList 配列に加えられた変更をまだ認識していないということです。UIKit が新しいセルを追加してセクション数をチェックする順序は、残念ながら制御できません。ただし、この問題を修正するには、UItableview の挿入操作と削除操作を beginUpdate メソッドと endUpdate メソッドの呼び出しでラップする必要があります。

[self.tableView beginUpdates];

// Do all the insertRowAtIndexPath and all the changes to the data source array

[self.tableView endUpdates];
于 2013-10-14T11:36:55.687 に答える
1

私の場合の問題は、2 つの indexPath(indexPath,lastIndexPath) を使用したことでした。しかし、lastIndexPath.row が私の配列から外れていた場合は、check condition.hope によってbound.solve がありました。

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, lastIndexPath, nil] withRowAnimation:UITableViewRowAnimationAutomatic];
于 2016-01-04T10:20:58.073 に答える