0

関係はないが、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で???

4

2 に答える 2

0

会社とイベントの 2 つのオブジェクト タイプを区別するための restkit には何もないと思います。

これには 2 つの方法があります。どちらも簡単で、何を選択するかはあなた次第です:

  1. 会社とイベントの両方について、restkit への rootkeypath を提供します。次に、json に rootkeypath を含めるように API を変更します。以下のようなもの..

    ["company":{ "Backendid":1 "company name":"abc" } {"events":{ {Backendid":1 "description":"party" }]

    この場合、restkit はどれがイベントで何が会社であるかを認識し、自動的に適切なテーブルにマップします。その他のヒントについては、rkgithub の例を参照してください。

  2. 両方に 2 つの異なる URL を持つようにオンライン API を設定します。したがって、別の URL は、restkit がテーブルを混同しないようにするためのものです。

また、ここでお聞きしたいのですが、イベントの列に会社名の列もありますか? マッピングから、イベントテーブルに会社名という名前の列がないように見えるため、restkitがエラーを返すと思っていたからです。ここである種の対多関係を作ろうとしていますか? 会社にはイベントが多いタイプのものがあります。

于 2012-06-21T06:12:46.803 に答える
0

マッピング プロバイダーには微調整が必​​要です。各マッピングにそれぞれの URL を設定します。

マッピングを次から変更:

[objectManager.mappingProvider setObjectMapping:companyMapping forResourcePathPattern:remoteObjectPath];
[objectManager.mappingProvider setObjectMapping:eventMapping forResourcePathPattern:remoteObjectPath];

に:

[objectManager.mappingProvider setObjectMapping:companyMapping forResourcePathPattern: remoteCompaniesObjectPath];
[objectManager.mappingProvider setObjectMapping:eventMapping forResourcePathPattern:remoteEventsObjectPath];
于 2012-07-02T20:59:02.673 に答える