2

我是 coredata 的新手。我有
1. 一个主视图控制器,我在其中输入数据并将数据保存在 coredata 中创建的相应实体中。
2. 然后我有一个 tableview(totalTableView) 控制器,它集中显示用户输入的数据,之后
3. 还有另一个 tableview (todaysTableView),它只显示当天输入的数据。

所有都通过导航控制器连接。当我从 todaysTableView 中删除一个对象时,它会自行消失,但是当我导航回 totalTableView 时,该对象仍然存在。此外,当我一直导航回到我的主视图控制器(主屏幕)然后我转到我的 totalTableView 时,已删除的对象不存在,现在它被清除,现在它完美了。为什么当我在删除后立即导航回 totalTableView 时它没有被清除。
我的视图控制器的流程是这样的

mainViewController-->totalTableView-->todaysTableView

这是我在 todaysTableView m.file 中的代码,用于删除带有对象 ID 的对象

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

{

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

if (editingStyle == UITableViewCellEditingStyleDelete) {

    // Delete the row from the data source


    [managedObjectContext deleteObject:[managedObjectContext objectWithID:moID]];

    [managedObjectContext save:nil];

    NSLog(@"object id check %@",moID);

    NSError *error = nil;

    if(![managedObjectContext save:&error])

    {
        NSLog(@"deleting error");

        return;
    }

    [self.todaysCategory removeObjectAtIndex:indexPath.row];

    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:(UITableViewRowAnimationFade)];

    [self.tableView endUpdates];

}

如果有人可以指导我解决这个问题。提前致谢

4

1 回答 1

2

TotalTableView 在内存中保存一些 NSManagedObjects,它会在初始化时获取这些对象。核心数据具有在对象被删除时通知 totalTableView 的机制,但您必须使用它们。

为了让您的 totalTableView 在删除对象时从其显示中移除对象,您必须响应 NSManagedObjectContextObjectsDidChangeNotification。在默认通知中心注册以接收此信息,当对象更改时,您将通过上下文收到通知。

[[NSNotificationCenter defaultCenter] addObserverForName:NSManagedObjectContextObjectsDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification* notification) {
    // Either reload your data, or respond case by case.
}];

来自文档:通知对象是托管对象上下文。userInfo 字典包含以下键:NSInsertedObjectsKey、NSUpdatedObjectsKey 和 NSDeletedObjectsKey。

于 2013-05-07T15:41:01.917 回答