ios - 在子上下文中保存会自动保存到父上下文

标签 ios core-data

我正在尝试创建一个更新功能,该功能还允许用户取消该过程。 我正在使用父子 managedObjectContext 并且我已经将父竞赛并发设置为 NSMainQueueConcurrencyType。我的计划是不调用父上下文的保存来取消更新。当我测试我的理论并注释掉上述保存行时,我发现 managedObject 仍在更新。我做错了什么?

部分更新函数代码:

NSManagedObjectContext *bgContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[bgContext setParentContext:self.managedObjectContext];
[bgContext setUndoManager:nil];

[bgContext performBlockAndWait:^{

    for (NSDictionary *itemDictionary in items) {
        //update cancelled
        if (status == -1) {
            return;
        }

        //Function to get a single managedObject by querying the main context.
        NSArray *array = [self queryEntity:entityName withResId:[dictionary objectForKey:@"res_id"]];

        //get the object id of queried managedobject; context -> mainContext
        ENTITY *object = (ENTITY *)[context objectWithID:[[array firstObject] objectID]];
        object.data = @"something"; //change data

        count++;

        //save every 100
        if(count%100 == 0) {
            [bgContext performBlockAndWait:^{
                NSError *error;
                if(![bgContext save:&error]) {
                    NSLog(@"insert error child: %@", [error localizedDescription]);
                }
            }];
        }
    }

    //save excess
    if(count%100 != 0) {
        [bgContext performBlockAndWait:^{
            NSError *error;
            if(![bgContext save:&error]) {
                NSLog(@"insert error child: %@", [error localizedDescription]);
            }
        }];
    }

    //comment out to prevent saving to parent
    /*[context performBlockAndWait:^{
        NSError *error;
        if(![context save:&error]) {
            NSLog(@"insert error parent: %@", [error localizedDescription]);
        }
    }];*/
}];

最佳答案

找到我的问题。感谢这篇文章:https://stackoverflow.com/a/7825536/2260928
我使用这些行来忽略取消时的更改:

[bgContext reset];
[context reset];

关于ios - 在子上下文中保存会自动保存到父上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21951280/

相关文章:

ios - 从 AppDelegate 启动 ViewController

ios - iOS6 中 UINavigationBar 的顶角被圆化

ios - 为 iTunes 创建通用应用程序?

ios - 使用 swift 在不同的 View Controller 之间切换

ios - 在 Core Data 中设置 NSManagedObject 的属性会阻止 iPad UI

ios - 解析 json 并保存核心数据 swift 2.0 最佳实践

swift - 核心数据插入 block UI

ios - 如何检测正在恢复的应用程序中是否出现 View ?

ios - 类没有实现 doesNotRecognizeSelector

ios - 我如何通知客户端以便某个帖子不再存在?