背景については、私の他の質問を参照してください: RestKit の動的マッピングは、この複雑な JSON マッピングを解決しますか?
サーバーが s に変換する必要がある json データを構造化する方法のため、次のようにNSManagedObject
、解析された json を渡して直接オブジェクト マッピングを行います。
RKObjectMapping *mapping = [RKObjectMapping requestMapping];
[mapping addAttributeMappingsFromDictionary:@{@"id": @"id", @"name": @"name"}];
NSDictionary *mappingsDictionary = @{ [NSNull null]: mapping };
RKMapperOperation *mapper = [[RKMapperOperation alloc]
initWithRepresentation:dataArray mappingsDictionary:mappingsDictionary];
NSError *mappingError = nil;
BOOL isMapped = [mapper execute:&mappingError];
if (isMapped && !mappingError) {
for (id thing in mapper.mappingResult.array) {
NSLog(@"Mapped the '%@' thing: %@", NSStringFromClass([thing class]), thing);
}
}
NSMutableArray、dataArray は次のようになります。[ {id: 1, "name":"AAA"}, {id: 2, "name":"BBB"}, ...]
コードは多数の辞書を出力しますが、必要なのはデータ モデル クラスから生成された Foo オブジェクト (.id & .name) です。
私が使用する場合:
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Foo" inManagedObjectStore:store];
「通常の」RestKitリクエストで成功するため、ストアが正常に機能している場合、次のエラーが表示されます。
キャッチされていない例外 'NSUnknownKeyException' が原因でアプリを終了しています。
私は何を間違っていますか?
アップデート:
ウェインのアドバイスに従って、私は次のように付け加えました。
RKManagedObjectMappingOperationDataSource *mappingDS = [[RKManagedObjectMappingOperationDataSource alloc] initWithManagedObjectContext:store.mainQueueManagedObjectContext cache:store.managedObjectCache];
mappingDS.operationQueue = [NSOperationQueue new];
上記のコードの前に、マッパーを作成した後、を呼び出す前にexecute
、提案されているようにデータ ソースを設定します。
mapper.mappingOperationDataSource = mappingDS;
そして、期待されるNSManagedObject
s を取得します。