0

Я использую основные данные в своем проекте, и в одном из своих представлений таблицы я заселяю ячейки некоторыми объектами, которые у меня есть.Не удается удалить ячейку вида таблицы

Первая ячейка в этом представлении таблицы - это объект, который я хочу удалить, основываясь на атрибуте статуса этого объекта. Таким образом, в другом представлении контроллер im меняет на первый объект в таблице «статус» на «1», и я хочу иметь возможность удалять ячейку визуально, но не основной объект данных.

Так что теперь мой метод commitEditingStyle выглядит следующим образом:

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

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     Target *target = [self.fetchedResultController objectAtIndexPath:indexPath]; 
     target.status = @1; 
     CoreDataStack *stack = [CoreDataStack defaultStack]; 
     [[stack managedObjectContext] deleteObject:target] ; 
     [stack saveContext]; 


    } 

    if ([_delegate respondsToSelector:@selector(didDeleteObject)]) { 
     [self fetchData]; 
     [_delegate didDeleteObject]; 
    } 

} 

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

CoreDataStack *stack = [CoreDataStack defaultStack]; 
[[stack managedObjectContext] deleteObject:target] ; 
[stack saveContext]; 

и теперь я не буду удалять запись, но ячейка будет удалена. Теперь странная вещь (мне), когда я удаляю эти строки, я не удаляю запись, но ячейка не удаляется ... Я не понимаю, почему с теми линиями, которые удалила ячейка ... это не те строки только удаление записи ..?

Благодаря метод

didDeleteObject:

- (void)didDeleteObject { 

    self.homeLabel.text = stackTableViewController.currentTarget; 
    self.homeLabel.frame = homeLabelRect; 
    for(int i = 40; i>5; i--){ 
     CGRect labelRect = [self.homeLabel.text 
          boundingRectWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT) 
          options:NSStringDrawingUsesLineFragmentOrigin 
          attributes:@{ 
             NSFontAttributeName : self.homeLabel.font 
             } 
          context:nil]; 
     if(labelRect.size.height < self.homeLabel.frame.size.height){ 
      self.homeLabel.font =[UIFont fontWithName:@"Candara-Bold" size:i]; 
      return; 
     } 
    } 
} 
+0

Поделитесь кодом метода 'didDeleteObject'. – Gandalf

+0

@ Gandalf сделано. (его в другом vc, так как его метод делегата) –

+0

Хорошо, честно говоря, я надеялся, что вы перегрузили данные таблицы в этом методе. Но поскольку вы не так, это не поможет. Но позвольте мне дать вам несколько указателей: - 1) В вашем подходе вы удаляете запись, а затем вы должны перезагружать данные таблицы после fetchData, которая автоматически удалит строку, поскольку количество записей меньше на единицу. Вот почему строка удалена. __ @ Solution__ - Поддерживать локальный массив для записей и при удалении ячейки удалять этот объект из массива и перезагружать таблицу. Следуйте этому [Ссылка] (http://www.ioscreator.com/tutorials/delete-rows-from-tableview) – Gandalf

ответ

0

Я вижу, вы используете NSFetchedResultController на вашем коде.

NSFetchedResultControllerDelegate методы работают вместе, удаляя UITableViewCell.

Проверьте код, который вызвал метод NSFetchedResultControllerDelegate.

- (void)controller:(NSFetchedResultsController *)controller 
    didChangeObject:(id)anObject 
     atIndexPath:(NSIndexPath *)indexPath 
    forChangeType:(NSFetchedResultsChangeType)type 
     newIndexPath:(NSIndexPath *)newIndexPath 
Смежные вопросы