我正在尝试创建一个更新功能,该功能还允许用户取消该过程。 我正在使用父子 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/