2013-10-14 3 views
5

Я разбор файл XML и положить его анализируемые значения в таблице view.The табличном имеет только один section.But я получаю следующее исключение:Assertion Failure - [UITableView _endCellAnimationsWithContext]

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 tableview [6068: 907] Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «попытаться вставить строку 0 в раздел 0, но после обновления«»есть только 0 строк* * Первый стек бросить вызов: (0x33e752a3 0x3bcde97f 0x33e7515d 0x3474aab7 0x35cb0a9f 0x35de6b27 0x6a10f 0x69ce5 0x33dc6037 0x346dc599 0x6b54b 0x3478c0f5 0x33e4a683 0x33e49ee9 0x33e48cb7 0x33dbbebd 0x33dbbd49 0x379702eb 0x35cd1301 0x68bdd 0x68b64) LibC++ abi.dylib: оконечный называется бросать исключения

код:

/** 
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; 
} 

ответ

1

В моем случае вопрос был я использовал два indexPath (indexPath, lastIndexPath). но для lastIndexPath.row из моего массива bound.solve по условию check.hope эта помощь кому-то.

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, lastIndexPath, nil] withRowAnimation:UITableViewRowAnimationAutomatic]; 
+0

@Megha. Благодарю. –

12

что происходит, что что TableView вы добавляете новую ячейку в еще не осведомлены об изменениях, сделанных в массив 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]; 
+0

Спасибо - это сделал трюк для меня! – mdebeus

0

Я обновлял строки после вызова API.

Попробуйте обновить строки внутри основного потока. (так как все обновления пользовательского интерфейса должны выполняться внутри основного потока).

Попробуйте это ....

DispatchQueue.main.async { 
    self.tableView.insertRows(at: [newIndexPath], with: .bottom) 
} 
Смежные вопросы