将parsing的数据馈送到RKMapperOperation将引发NSUnknownKeyException

看到我的另一个问题的背景: RestKit的dynamic映射将解决这个复杂的JSON映射?

由于服务器的结构,我需要转换成NSManagedObject的JSON数据的方式,我传递parsing的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请求,我得到的错误:

终止应用程序由于未捕获的exception“NSUnknownKeyException”,原因:'[valueForUndefinedKey:]:实体(空)不是密钥值编码兼容的密钥“ID”。

我究竟做错了什么?

更新:

按照Wain的build议,我补充说:

 RKManagedObjectMappingOperationDataSource *mappingDS = [[RKManagedObjectMappingOperationDataSource alloc] initWithManagedObjectContext:store.mainQueueManagedObjectContext cache:store.managedObjectCache]; mappingDS.operationQueue = [NSOperationQueue new]; 

在上面的代码之前,然后在创build映射器之后,在调用execute之前,我设置了数据源,如下所示:

 mapper.mappingOperationDataSource = mappingDS; 

我得到了预期的NSManagedObject

映射器操作本身不知道如何创build要映射到的类的实例。 实体映射是正确的,但是您需要教导映射器操作如何实例化Foo对象。 为此,您需要创build一个RKManagedObjectMappingOperationDataSource并将其设置为mappingOperationDataSource