我想解析一个XML文档,并使用背景队列将其数据存储在核心数据存储中。我正在使用的iOS推出了新的嵌套UIManagedObjectContext概念5.在NSManagedObjectContext后台线程解析和“不同的上下文”问题
我添加了一个新的类别,以我的NSManagedObject公司,负责处理公司的具体数据解析:
- (void)parseAttributesFrom:(NSString*)xmlStr
inManagedObjectContext:(NSManagedObjectContext*)managedObjectContext
{
NSManagedObjectContext * context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.parentContext = self.managedObjectContext;
[context performBlock:^{
IBCompany *company = self;
[company setValue:[[[document.root childNamed:@"CoIDs"] childWithAttribute:@"Type" value:@"CompanyName"] value] forKey:@"companyName"];
...
这是我怎么称呼这个方法:[company parseAttributesFrom:xmlStr inManagedObjectContext:self.managedDocument.managedObjectContext];
请注意,即使我将托管对象上下文作为参数传递给方法,我的问题仍未更改。
当我运行的代码,它崩溃,我设置annualPeriod公司与错误信息NSInvalidArgumentException:'Illegal attempt to establish a relationship 'company' between objects in different contexts (source = <IBEstPeriod: ...
:
IBEstPeriod *annualPeriod = [NSEntityDescription insertNewObjectForEntityForName:@"IBEstPeriod" inManagedObjectContext:context];
[annualPeriod setCompany:company];
我努力理解为什么错误应当与不同的上下文当代码运行在相同的背景创意中时,代码为。我将不胜感激任何帮助!!
你说得对,两个托管对象都有不同的上下文。我通过在后台上下文中重新提取公司管理对象来解决问题。我的背景代码现在可用。谢谢,尼基塔! – AlexR