0

我在我的项目中使用核心数据,并在我的一个表格视图中填充单元格与我有一些对象。无法删除表格视图单元格

此表视图中的第一个单元格是我想根据此对象'状态'属性删除的对象。因此,在另一个视图控制器中,我将表中的第一个对象更改为'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