3

私は、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 から削除する方法ですか?

4

2 に答える 2

7

使用しているためNSFetchedResultsController、コンテキストからオブジェクトを削除するだけで、変更が取得され、行が削除されます。

したがって、行を削除して、deleteRowsAtIndexPaths:代わりにこれを呼び出します。

[self.fetchedResultsController.managedObjectContext deleteObject:user];
于 2013-05-06T09:12:52.923 に答える