XMLドキュメントを解析し、バックグラウンドキューを使用してそのデータをCoreDataストアに保存しようとしています。iOS5で導入された新しいネストされた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];
です。管理対象オブジェクトのコンテキストをパラメーターとしてメソッドに渡しても、問題は変わらないことに注意してください。
コードを実行すると、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];
コードが同じバックグラウンドのアイデアで実行されているときに、エラーがさまざまなコンテキストに関連している必要がある理由を理解するのに苦労しています。助けていただければ幸いです!!