удаление строки из табличного представления - PullRequest
0 голосов
/ 27 марта 2012

У меня возникают проблемы с моим tableView падением, когда я пытаюсь удалить строку из таблицы. Метод вызывается правильно, так как изменения внесены в базу данных правильно. Ошибка, которую я получаю:

Неверное обновление: недопустимое количество строк в разделе 0.

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

    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context = [delegate managedObjectContext];


    NSManagedObject *objectToDelete = [fixedArray objectAtIndex:indexPath.row];

    [context deleteObject:objectToDelete];

    [delegate saveContext];

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

    fixedArray = ([self mondayData]); // this is fetching the data for the array that I supply to the table view

[self.tableView numberOfRowsInSection:[fixedArray count]];

    [self.tableView reloadData];


}


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

    return [fixedArray count];
}

Ответы [ 3 ]

0 голосов
/ 28 марта 2012

Вам необходимо включить

[tableView beginUpdates];

и

[tableView endUpdates];

в вашем коде. Эти два метода предотвратят сбой UITableView при удалении или вставке строк.

Поставьте beginUpdates перед удалением строки tableView, а затем endUpdates, когда все закончите.

Вот документация .

0 голосов
/ 28 марта 2012
    [tableView beginUpdates];

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];


        NSManagedObject *object = [fixedArray objectAtIndex:indexPath.row];

        [object setValue:@"No" forKey:@"selected"]; // this works and persists into the database

        [delegate saveContext];

        fixedArray = ([self mondayData]);

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];

    }


    [tableView endUpdates];

    [self.tableView reloadData];

В конце концов это сработало.

0 голосов
/ 27 марта 2012

Ваш метод - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section, вероятно, не возвращает соответствующее количество строк.Он должен вернуть предыдущее количество строк минус количество только что удаленных строк.

Кроме того, если в разделе больше нет строк, необходимо удалить этот раздел из UITableView.

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