![](/img/trans.png)
[英]Setup that allows a child NSManagedObjectContext to Fetch when it's parent context is Saving
[英]Saving in child context saves to parent context automatically
我正在嘗試創建一個更新功能,該功能還允許用戶取消該過程。 我正在使用父子托管對象上下文,並將父競賽的並發性設置為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];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.