2014-01-16 2 views
0

Я пытаюсь удалить строку из UITable, которая является частью на UIViewController. Я использую кнопку Edit в навигационной панели. При нажатии на нее строки таблицы будут переведены в режим редактирования. Но когда кнопка удаления подряд нажимается я получаю ошибку ...'Invalid update: invalid number of rows in section 0…. при использовании следующих:ios удалить строку из таблицы в ViewController

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
[super setEditing:editing animated:animated]; 
[self.tableView setEditing:editing animated:YES]; 

} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     NSMutableArray *work_array = [NSMutableArray arrayWithArray:self.inputValues]; 
     [work_array removeObjectAtIndex:indexPath.row]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

Что мне не хватает здесь? Документация Apple кажется устаревшей как-то. Thanks

ответ

2

Проблема проста. Вы не обновляете свою модель данных должным образом, прежде чем удалять строку из таблицы.

Все, что вы делаете, это создать новый массив и удалить из него строку. Это бессмысленно. Вам необходимо обновить тот же массив, который используется другими методами источника данных, например numberOfRowsInSection:.

+0

Здравствуйте, rmaddy, Спасибо за подсказку. Я просто взял дополнительный массив и изменил его на свой массив, который я использую в модели данных. Я был слишком неаккуратен. Благодаря! – JFS

1

Проблема, с которой вы сталкиваетесь, заключается в том, что вы напрямую не обновляете источник данных вашей таблицы. Сначала вы создаете совершенно новый массив, называемый work_array, на основе вашего источника данных (я предполагаю, что это self.inputValues), а затем вы удаляете из него элемент, а затем пытаетесь удалить строку, но источник данных tableView по-прежнему содержит элемент вы намеревались удалить.

Все, что вам нужно сделать, это убедиться, что self.inputValues ​​является изменяемым массивом и непосредственно удалить объект на индексе для этого массива, например:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [self.inputValues removeObjectAtIndex:indexPath.row]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

Я надеюсь, что помогает!

+0

Спасибо за ответ, я нашел свою ошибку с подсказкой rmaddys. Спасибо, в любом случае! – JFS

+0

Нет проблем, не забудьте принять его как правильный ответ! – Mike

Смежные вопросы