関係はないが、RestKitを使用して同じリモートAPIにある複数のオブジェクトをCoreDataにロードする必要があります(つまり、リモートオブジェクトをダウンロードしてiOSでローカルに使用します)
だから私は私のクライアントとobjectManagerを設定しました:
client = [RKClient clientWithBaseURL:[NSURL URLWithString:baseUrl]];
[client setUsername:@"someUsername"];
[client setPassword:@"somePassword"];
objectManager = [RKObjectManager managerWithBaseURLString:baseUrl];
[objectManager setClient:client];
次に、1つのオブジェクト#1に対していくつかのマッピングを設定します。
RKManagedObjectMapping* companyMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Company" inManagedObjectStore:objectManager.objectStore];
companyMapping.primaryKeyAttribute = @"backendID";
[companyMapping mapKeyPath:@"id" toAttribute:@"backendID"];
[companyMapping mapKeyPath:@"company_name" toAttribute:@"companyName"];
次に、オブジェクト#2のマッピングをいくつか設定します。
RKManagedObjectMapping* eventMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Event" inManagedObjectStore:objectManager.objectStore];
eventMapping.primaryKeyAttribute = @"backendID";
[eventMapping mapKeyPath:@"id" toAttribute:@"backendID"];
[eventMapping mapKeyPath:@"description" toAttribute:@"eventDescription"];
その後、objectMappingをmappingProviderに設定します。
[objectManager.mappingProvider setObjectMapping:companyMapping forResourcePathPattern:remoteObjectPath];
[objectManager.mappingProvider setObjectMapping:eventMapping forResourcePathPattern:remoteObjectPath];
そして最後に、これらのオブジェクトの両方に対して次々に「loadObjects...」を呼び出します。
[objectManager loadObjectsAtResourcePath:remoteCompaniesObjectPath delegate:self];
[objectManager loadObjectsAtResourcePath:remoteEventsObjectPath delegate:self];
この後、CompaniesとEventsの両方からのデータが何らかの形でEventsテーブルに読み込まれるため、テーブルデータは完全に使用できなくなります。私が実行した場合のみloadObjectsAtResourcePath:remoteCompaniesObjectPath
、すべてが期待どおりに機能し、リモートのCompanyオブジェクトがCoreData内の独自のテーブルにダウンロードされます。
なぜそれが起こっているのかは理にかなっていますが(企業のデータがロードを開始し、新しいマッピングを取得するため、間違ったテーブルにロードされます)、質問は次のとおりです。メソッドを呼び出しloadObjectsAtResourcePath:remoteObjectPath
て、それぞれのテーブルに適切にロードされるように、複数の無関係なオブジェクトをロードする方法CoreDataで???