Приложение Tableview при редактировании сбоя в iphone?

в приложении у меня есть пользовательский tableview(UITableView *tableView), подкласс uiviewcontroller и при редактировании tableview отлично отображается, но когда я удаляю строку

- (void)tableView:(UITableView *)tableView1 commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        //[appDelegate deleteItemAtIndexPath:indexPath];
        [self testing:indexPath];
        [tableView deleteRowsAtIndexPaths:
         [NSArray arrayWithObject:indexPath] 
                     withRowAnimation:UITableViewRowAnimationFade];//in this line app crash 
        NSLog(@"delete row");
        [tableView reloadData];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        //nothing to do item already added
    }   
} 

в этом методе, когда точка останова находится на этой строке

[tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

мое приложение вылетает из-за того, что я делаю, чтобы выйти из этого.

- (void) тестирование: (NSIndexPath *) path {

Player *doc = [[Player alloc]init];
NSMutableArray* reversedArray = [[NSMutableArray alloc] initWithArray:[[[[NSArray alloc] initWithArray: _data] reverseObjectEnumerator] allObjects]];

doc = [reversedArray objectAtIndex:path.row];
NSLog(@"%@,%d", doc.name,path.row);
[self deleteRow:doc];

}

- (void) deleteRow: (Player *) doc {

// ReferMeAppDelegate * appDelegate = (ReferMeAppDelegate *) [[UIApplication sharedApplication] делегат]; self.party = [PartyParser loadParty]; if (_party! = nil) {для (Игрок * игрок в _party.players) {NSLog (@ "% @,% @", player.name, player.alert); NSComparisonResult resultName, resultEmail, resultPhone, resultLocation; // NSString * str = [appDelegate.plistDict valueForKey: @ "flag"]; // если ([длина player.email]! = 0 && player.alert == @ "1") {resultName = [doc.name compare: player.name]; resultEmail = [doc.email compare: player.email]; resultPhone = [сравнение doc.phone: player.phone]; resultLocation = [doc.location compare: player.location]; если (resultName == 0 && resultEmail == 0 && resultPhone == 0 && resultLocation == 0) {//lblName1.text = @ "равный"; Игрок * playerr = [[Распределение игроков] инициализация]; playerr = игрок; [_party.players removeObject: playerr]; //[_party.players removeObjectAtIndex: path.row]; ломать; } //} //if([player.email length] == 0 && player.alert == @ "2") {else {resultName = [doc.name compare: player.name]; resultPhone = [сравнение doc.phone: player.phone]; if (resultName == 0 && resultPhone == 0) {Player * playerr = [[Player alloc] init]; playerr = игрок; [_party.players removeObject: playerr]; перерыв;
}}}

        for (Player *player in _party.players) {
            NSLog(@"after match case player names");
            NSLog(@"%@", player.name);
        }
        [PartyParser saveParty:_party];
    }

}

Я использую GData xml в приложении, которое поддерживает операции чтения и записи.


person iOS_User    schedule 09.12.2010    source источник
comment
что такое журнал сбоев на консоли?   -  person Swastik    schedule 09.12.2010
comment
*** Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (1), должно быть равно количеству строк. содержалось в этом разделе перед обновлением (1), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 1 удалено) ». 2010-12-09 14: 04: 01.478 Ссылка [29684: 207] Стек:   -  person iOS_User    schedule 09.12.2010


Ответы (1)


deleteRowsAtIndexPaths: метод выполняет только визуальный эффект удаления, вы также должны вручную удалить соответствующий элемент из вашего источника данных, чтобы количество элементов в нем соответствовало ожидаемому от вашей операции, например:

//You need to remove item from data source
[yourMutableDataArray removeObjectAtIndex:indexPath.row]; 
// Tell table view to remove the corresponding item cell
[tableView deleteRowsAtIndexPaths:
             [NSArray arrayWithObject:indexPath] 
             withRowAnimation:UITableViewRowAnimationFade];//in this line app crash 
NSLog(@"delete row");
//[tableView reloadData]; // You do not need this line
person Vladimir    schedule 09.12.2010
comment
я отредактировал свой вопрос, я удаляю данные строки в xml, но он генерирует такой же сбой - person iOS_User; 09.12.2010
comment
Привет, iOS_User, у тебя есть какое-то решение. Теперь я столкнулся с той же проблемой за последние 2 дня. Я не могу решить эту проблему. Не могли бы вы мне помочь? - person Soumya Ranjan; 22.05.2014