【问题标题】:Delete from UITableView using an NSFetchedResultsController使用 NSFetchedResultsController 从 UITableView 中删除
【发布时间】:2013-05-06 09:09:59
【问题描述】:

我有一个通过 NSFetchedResultsController 填充的 UITableView。当用户向右滑动一个项目时,我会出现一个删除按钮,以便他/她可以使用以下方法删除该对象:

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
    return YES;
}

 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}


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

if (editingStyle == UITableViewCellEditingStyleDelete) {
    //perform similar delete action as above but for one cell

    XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath];

    NSLog(@"User delete: %@", [user displayName]);

    //delete from fetchController
    NSArray *sections = [[self fetchedResultsController] sections];
    int userStatus = [[user sectionNum] intValue];


    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

    }
}

但是当我这样做时会出现异常,因为我没有更新我的 fetchedResultsController 模型。问题是如何使用我从 commitEditingStyle 获得的 indexPath 从 fetchedController 中删除?

【问题讨论】:

    标签: objective-c uitableview


    【解决方案1】:

    由于您使用的是NSFetchedResultsController,您只需要从上下文中删除对象,它就会获取更改并为您删除行。

    所以删除deleteRowsAtIndexPaths: 行并改为调用它:

    [self.fetchedResultsController.managedObjectContext deleteObject:user];
    

    【讨论】:

    • 我得到:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (11)必须等于更新之前该节中包含的行数 (11),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或删除的行数离开该部分(0 移入,0 移出)。'
    • @user1845360:你必须删除对象,但你必须不调用deleteRowsAtIndexPaths。这是稍后在 FRC 委托方法中完成的。
    【解决方案2】:

    看看这个Answer,你要做的就是从你的数据库和NSFetchedResultsController中删除一个NSManagedObject。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多