2

背景については、私の他の質問を参照してください: 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;

そして、期待されるNSManagedObjects を取得します。

4

1 に答える 1