私はRestKitをはじめて使用しています。残念ながら、現在のプロジェクトでループが起こりました。RestKit:2つの別々のフィード、2つの異なるオブジェクトタイプ。 1つのオブジェクトマネージャー?
まず、2つのフィードがあります。ニュースや写真のためのいずれかの一つ...
ニュースフィード...
[
{"id":1234, "title":"Top story"},
{"id":1235, "title":"Next story"},
{"id":1236, "title":"Final story"}
]
写真は私のコアデータモデルでは、私はこれらのエンティティを持っている... ...
[
{"id":1919, "url":"president.jpg"},
{"id":1920, "url":"celebrity.jpg"},
{"id":1921, "url":"sports.jpg"}
]
を養いますこれらの属性に一致する作成されます。私はまた、RestKitのセットアップの私のマッピングを...
RKManagedObjectMapping* newsMapping = [RKManagedObjectMapping mappingForEntityWithName:@"News"];
newsMapping.primaryKeyAttribute = @"id";
[newsMapping mapKeyPath:@"id" toAttribute:@"id"];
[newsMapping mapKeyPath:@"title" toAttribute:@"article_id"];
[objectManager.mappingProvider setMapping:newsMapping forKeyPath:@"News"];
RKManagedObjectMapping* photoMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Photo"];
photoMapping.primaryKeyAttribute = @"id";
[photoMapping mapKeyPath:@"id" toAttribute:@"id"];
[photoMapping mapKeyPath:@"url" toAttribute:@"url"];
[objectManager.mappingProvider setMapping:photoMapping forKeyPath:@"Photo"];
...上記のコードで私が指定したキーパスがフィードに存在しないことを認識してんだけど、空のキーパスを提供するだけで上書きするように見えたしていますマッピングとRestKitはフィードの欠けているkeyPAthsを無視するように見えました。次に、オブジェクトを表示しているビューコントローラのそれぞれで、かなり類似したコードを実行します。
RKObjectManager* objectManager = [RKObjectManager sharedManager];
// objectManager.inferMappingsFromObjectTypes = YES;
[objectManager loadObjectsAtResourcePath:@"json/news" delegate:self block:^(RKObjectLoader* loader) {
loader.objectMapping = [objectManager.mappingProvider objectMappingForClass:[News class]];
}];
...十分な背景。このコードはすべて、ゼロのニュースとゼロの写真をロードします。写真のマッピングをコメントアウトすると、すべてのニュースアイテムが表示され、ニュースのマッピングをコメントアウトすると、写真が店舗に表示されます。
RestKitは、各フィードのコンテンツとそのマッピングを一致させることはできません。フィードに何も指定されていないため、setMapping:forKeyPath:で指定されたキーパスは機能しません。多分objectManager.inferMappingsFromObjectTypes = YESは、RestKitが各フィードの内容を検査し、適切なマッピングを選択すると思っていましたが、そうではありませんでした。また、私はobjectMappingForClassを仮定しました:自動的に正しいマッピングを取得しますが、いいえ。誰もこの作品を作る方法を知っていますか?
更新:実際には、アプリケーションが初めて実行されたときにアイテムがロードされていないと報告しても、私が停止して再び実行すると、キャッシュからロードされた20のニュースアイテムと20枚の写真がすべて表示されます。これを確認するには、「ローカルのストレージにスレッド0のすべてのNewsオブジェクトをキャッシュする」というメッセージが表示され、すぐに.sqliteファイルを開き、20項目すべてを期待どおりに表示することで、これを確認しました。