удаление ячеек табличного представления не работает - PullRequest
0 голосов
/ 23 августа 2010

Я использовал стандартный код sdk для удаления, но он вылетает, когда я нажимаю кнопку удаления. Я использую этот код

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

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[tableFavoritesData arrayWithObject:indexPath] withRowAnimation:YES];
    }
}

Я пытался использовать как NSMutableArray, так и tableFlectedData, но ничего не работает.

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

Ну, в общем, вы хотите сделать следующее:

  1. Удалить строку из источника данных (массива).
  2. Сказать табличному представлению, что вы удалили строку изисточник данных.

Правильный код, вероятно, должен выглядеть примерно так:

if (editingStyle == UITableViewCellEditingStyleDelete) {
 [tableFavoritesData removeObjectAtIndex:indexPath.row];
 [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
 }   

РЕДАКТИРОВАТЬ: я не заметил другой ошибки.

Вам необходимо указатьтип анимации, а не просто передать ДА или НЕТ.Например: UITableViewRowAnimationFade.Проверьте возможные значения UITableViewRowAnimation здесь .

РЕДАКТИРОВАТЬ 2: Для комментария ниже (форматирование комментария отстой): Проверьте NSNotificationCenter в документах, особенно addObserver: селектор:имя: объект: и postNotificationName: объект: методы.

В другом вашем контроллере представления (возможно, метод viewDidLoad):

[[NSNotificationServer defaultCenter] addObserver:self selector:@selector(deletedRow:) name:@"RowDeleted" object:nil];

-(void) deletedRow:(NSNotification*) notification
{
  NSDictionary* userInfo = [notification userInfo];
  NSIndexPath indexPath = [userInfo objectForKey:@"IndexPath"];
 // your code here
}

и при удалении строки:

if (editingStyle == UITableViewCellEditingStyleDelete) {
...
[[NSNotificationServer defaultCenter] postNotificationName:@"RowDeleted" object:self userInfo:[NSDictionary dictionaryWithObject:indexPath forKey:@"IndexPath"]];
     }   

Просто помните, что вам нужно удалить наблюдателя из центра уведомлений, когда вы освобождаете другой UIViewController:

[[NSNotificationServer defaultCenter] removeObserver: self];

Надеюсь, я не совершил много ошибок, у меня нет доступа к атм XCode.

0 голосов
/ 23 августа 2010

Если вы посмотрите на консоль, она, скорее всего, скажет вам, что ваша модель (ваша структура данных) не соответствует ожиданиям таблицы. То есть Ваш метод делегата

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

должен вернуть на единицу меньше, чем раньше.

Кроме того, [tableFavoritesData arrayWithObject:indexPath] выглядит очень странно и, вероятно, не то, что ожидалось. Может быть, вы хотите [NSArray arrayWithObject:indexPath] здесь. И сначала удалите данные из вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...