UITableView действует при попытке удалить ячейку - PullRequest
1 голос
/ 01 ноября 2011

У меня есть UITableViewController, когда я пытаюсь провести пальцем, чтобы удалить ячейку, и нажимаю «Удалить», он переводит ячейку в режим редактирования и показывает красную стрелку слева. Но данные уже удалены. Потому что, когда я перезапускаю приложение, оно исчезает. Что-нибудь в моем коде выглядит подозрительным?

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

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

    if (self.tableView.editing)
        [self.navigationItem.leftBarButtonItem setTitle:@"Done"];
    else
        [self.navigationItem.leftBarButtonItem setTitle:@"Edit"];
}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {
     if (editingStyle == UITableViewCellEditingStyleDelete) 
     {
         PFObject *routine= [self.routineArray objectAtIndex:indexPath.row];
         [routine deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
             if (!error) {
                 [self.tableView reloadData];
             } else {
                 // There was an error saving the gameScore.
             }
         }];   
     }
 }

1 Ответ

1 голос
/ 01 ноября 2011

Вы должны удалить элемент из вашего источника данных self.routineArray, затем удалить его из таблицы с помощью -deleteRowsAtIndexPaths:withRowAnimation:, а затем удалить его из основного хранилища данных. Порядок важен, потому что вы не можете удалить его из tableView, если он все еще существует в вашем источнике данных, или возникнет исключение из-за того, что tableView не синхронизирован с количеством элементов, которые его dataSource.

В этом примере он сначала удаляется из хранилища данных, затем из источника данных, затем удаляется из tableView, что также должно работать.

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {
        PFObject *routine= [self.routineArray objectAtIndex:indexPath.row];
        [routine deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (!error) {
                [self.routineArray removeObjectAtIndex:indexPath.row];
                [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            } else {
                // There was an error saving the gameScore.
            }
        }];   
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...