核心数据:我的托管对象上的托管对象上下文为零
Posted
技术标签:
【中文标题】核心数据:我的托管对象上的托管对象上下文为零【英文标题】:Core Data: nil managed object context on my managed object 【发布时间】:2011-09-14 20:50:04 【问题描述】:我正在使用 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 上下文返回 nil!!
它是如何变成空的?我没有取消它,这似乎是它抱怨的原因。
【问题讨论】:
【参考方案1】:我想通了
[context reset];
..每 50 条记录被调用一次,这当然是从上下文中删除了我的 metricType 对象并且我没有重新获取它。
【讨论】:
【参考方案2】:您初始化 metricType 的方式看起来很可疑。 [self metricTypeForName:fromContext:] 实际上做了什么来返回一个 MetricType 实例?您是否正在使用 [[MetricType alloc]init] 创建新的 MetricType?我怀疑你在自动释放池中返回一些东西
【讨论】:
不,没有什么可疑的事情发生。我使用标准核心数据获取从存储中获取一个对象,如果它不存在,我使用标准核心数据技术创建它。无论如何,我的答案如下:我正在重置上下文。以上是关于核心数据:我的托管对象上的托管对象上下文为零的主要内容,如果未能解决你的问题,请参考以下文章