我在后台使用2个托管对象上下文,用于高效重要的大型数据集。我确保我一次只在线程中使用1个托管对象上下文。核心数据:无管理的对象上下文在我的管理对象
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[self persistentStoreCoordinator]];
MetricType *metricType = [self metricTypeForName:self.metricName fromContext:context];
NSLog(@"metric context %@", [metricType managedObjectContext]);
[self processDataInContext:context forMetric:metricType];
在上面的代码中,NSLog正确地输出了我使用的managedObjectContext的地址。然后,我继续processDataInContext - 这只是一个私人方法,通过json数据数组进行交互并添加对象。每个对象都与MetricType有关系。
然而,当我去他们
metric.metricType = metricType;
关联我得到的错误:非法尝试建立在不同的上下文对象之间的关系“metricType” ......即使我保证我不不要这样做。
当我这行之前做了日志输出:
NSLog(@"My Context %@", context);
NSLog(@"metric context %@", [metricType managedObjectContext]);
的metricType背景下返回零!
它变得如何被剔除?我没有零,这似乎是它抱怨的原因。
不,没有什么可怕的事情发生。我使用标准的核心数据提取来从商店获取对象,如果它不存在,我使用标准核心数据技术创建它。无论如何,我的答案如下:我正在重置上下文。 – bandejapaisa