ios - 将解析后的数据提供给 RKMapperOperation 会抛出 NSUnknownKeyException

标签 ios restkit restkit-0.20

请参阅我的其他问题了解背景:Will RestKit's dynamic mapping solve this complex JSON mapping?

由于服务器构造我需要转换为 NSManagedObject 的 json 数据的方式,我传递解析的 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”而终止应用程序,原因:“[ valueForUndefinedKey:]:实体 (null) 不符合键“id”的键值编码。

我做错了什么?

更新:

根据韦恩的建议,我补充道:

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

在上述代码之前,然后在创建映射器之后,在调用 execute 之前,我按照建议设置了数据源:

mapper.mappingOperationDataSource = mappingDS;

我得到了预期的 NSManagedObjects。

最佳答案

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

关于ios - 将解析后的数据提供给 RKMapperOperation 会抛出 NSUnknownKeyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234480/

相关文章:

iOS计算文件大小总和总是负数

objective-c - RestKit - 发送 POST 和接收响应映射

ios - RestKit 0.23.3 : mapping same key twice (or even more often) does not work

ios - RestKit 使用对象发帖并获取对象响应

ios - 报亭套件 : Can an app be launched because an asset has become available?

ios - atos 无法为架构 arm64 的文件 my.app.dSYM 加载符号

ios - SwiftUI:如何在列表内正确设置内容大小变化的动画?

ios - SLComposeViewController - SLServiceTypeTwitter、声音和视频

ios - 核心数据获取谓词 nil 检查失败/意外结果?

ruby-on-rails - RestKit 0.10.1 with Core Data 陡峭的学习曲线