2011-09-14 127 views
0

我在后台使用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背景下返回零!

它变得如何被剔除?我没有零,这似乎是它抱怨的原因。

回答

0

我想通了

[context reset]; 

..was被称为每50条记录,这当然是从上下文中删除我的metricType对象,我并没有重新获取它。

0

您初始化metricType的方式看起来很腥。 [self metricTypeForName:fromContext:]实际上是否返回MetricType实例?您是否使用[[MetricType alloc] init]创建新的MetricType?我怀疑你正在自动释放池中返回一些东西

+0

不,没有什么可怕的事情发生。我使用标准的核心数据提取来从商店获取对象,如果它不存在,我使用标准核心数据技术创建它。无论如何,我的答案如下:我正在重置上下文。 – bandejapaisa

相关问题