我正在尝试解析 XML 文档并将其数据存储在使用后台队列的核心数据存储中。我正在使用 iOS 5 中引入的新的嵌套 UIManagedObjectContext 概念。
我为我的 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];
请注意,我的问题没有改变,即使我将托管对象上下文作为参数传递给该方法。
当我运行代码时,它会在我设置公司的年度期间崩溃,并显示错误消息 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];
当代码以相同的背景思想运行时,我很难理解为什么错误应该与不同的上下文相关。我将不胜感激任何帮助!!