无法删除表格视图单元格

时间:2015-07-02 23:19:08

标签: ios objective-c uitableview core-data nsfetchedresultscontroller

我在我的项目中使用核心数据,在我的一个表格视图中,我用一些对象填充单元格。

此表视图中的第一个单元格是我要根据此对象“status”属性删除的对象。所以在另一个视图控制器中我改变到表中的第一个对象'status'为'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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我看到你在你的代码上使用了NSFetchedResultController。

NSFetchedResultControllerDelegate方法一起删除UITableViewCell。

请检查您的代码NSFetchedResultControllerDelegate方法。

- (void)controller:(NSFetchedResultsController *)controller 
   didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath 
     forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath