删除NSMutableSet核心数据中的对象

时间:2012-07-07 20:45:15

标签: object core-data nsmutableset

我在使用核心数据删除NSMutableSet中的对象时遇到问题。我试图删除tableview第二部分中的“播放器”对象。我收到了错误;

  

无效更新:第1部分中的行数无效   更新(6)后必须包含在现有部分中的行   等于之前该部分中包含的行数   更新(6),加上或减去插入或删除的行数   该部分(0插入,1删除)和加号或减号的数量   移入或移出该部分的行(0移入,0移出

解决方案

看看我的代码。

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


        if (indexPath.section==0) {

        }else{

            _player = [self.fetchedResultsController.fetchedObjects objectAtIndex: indexPath.row];
            [self.managedObjectContext deleteObject:_player];
            [self performFetch];
            [self.managedObjectContext save:nil];

            // here the solution to make it works...
            [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1]  withRowAnimation:UITableViewRowAnimationFade];               
        }            
    }   
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch(section){
        case 0:
            return 4;
        case 1:
            return [self.fetchedResultsController.fetchedObjects count];
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

通常,当您需要从表视图中删除或删除元素时,您需要执行两步操作:

  1. 处理模型
  2. 处理表动画
  3. 您只执行了第一部分。要完成,您需要执行如下调用

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

    您需要将deleteRowsAtIndexPaths:withRowAnimation:包裹在beginUpdates之间 和endUpdates如果你为你的表执行多个动画,例如删除,修改等。这不是这种情况,但无论如何你都可以这样做。

    当您使用核心数据时,您可以免费(必须编写一些代码)NSFetchedResultsController及其委托NSFetchedResultsControllerDelegate。因此,当您删除带有deleteObject调用的元素时(步骤1),代理将自动响应该更改并执行步骤2.

    请查看How to use NSFetchedResultsController以了解如何正确设置它。

    上面代码的修复是使用

    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1]  withRowAnimation:UITableViewRowAnimationFade];
    

    希望有所帮助。