使用NSFetchedResultsController从UITableView中删除

use*_*360 3 objective-c uitableview

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

// 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];

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,有一个例外,因为我没有更新我的fetchedResultsController模型.问题是如何使用commitEditingStyle中的indexPath从fetchedController中删除?

Mik*_*ler 7

由于您正在使用NSFetchedResultsController您只需要从上下文中删除该对象,它将获取更改并为您删除行.

所以删除该deleteRowsAtIndexPaths:行并调用它:

[self.fetchedResultsController.managedObjectContext deleteObject:user];
Run Code Online (Sandbox Code Playgroud)

  • @ user1845360:您必须删除该对象,但您必须*不能调用*`deleteRowsAtIndexPaths`.稍后将在FRC委托方法中完成. (3认同)