Ios 如何使用RestKit 0.24和RKObjectMapping将本地JSON字符串映射到对象中?

Ios 如何使用RestKit 0.24和RKObjectMapping将本地JSON字符串映射到对象中?,ios,objective-c,restkit,rkobjectmapping,restkit-0.24.x,Ios,Objective C,Restkit,Rkobjectmapping,Restkit 0.24.x,我正在尝试使用RestKit 0.24.0将JSON NSString映射到一个对象中,我在其中有一个RKObjectMapping以及相应的字典 大多数在线解决方案都参考RestKit 0.22及以下版本 SO上的一些解决方案导致应用程序崩溃 将本地字符串转换为对象的最简单方法是什么。考虑下面的 代码更新 RKMapperOperation *mapper = [[RKMapperOperation alloc] initWithRepresentation:parsedData ma

我正在尝试使用RestKit 0.24.0将JSON NSString映射到一个对象中,我在其中有一个RKObjectMapping以及相应的字典

大多数在线解决方案都参考RestKit 0.22及以下版本

SO上的一些解决方案导致应用程序崩溃

将本地字符串转换为对象的最简单方法是什么。考虑下面的

代码更新

    RKMapperOperation *mapper = [[RKMapperOperation alloc] initWithRepresentation:parsedData mappingsDictionary:[RJobObject mappingDictionary]];
    RJobObject * rrrr = [[RJobObject alloc] init];
    mapper.targetObject = rrrr;
    //mapper.mappingOperationDataSource = parsedData;


    [mapper execute:nil];
这里,
mappingDictionary
基本上是JSON键和对象变量名之间的键值对匹配 因此,在上面的代码中,每当我运行
execute
,应用程序就会崩溃

堆栈跟踪

    2015-11-22 09:12:29.193 Help[22427:699579] -[__NSCFConstantString forceCollectionMapping]: unrecognized selector sent to instance 0x1022736a0
    2015-11-22 09:12:29.211 Help[22427:699579] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString forceCollectionMapping]: unrecognized selector sent to instance 0x1022736a0'
    *** First throw call stack:
    (
     0   CoreFoundation                      0x0000000105d7dc65 __exceptionPreprocess + 165
     1   libobjc.A.dylib                     0x0000000105a14bb7 objc_exception_throw + 45
     2   CoreFoundation                      0x0000000105d850ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
     3   CoreFoundation                      0x0000000105cdb13c ___forwarding___ + 988
     4   CoreFoundation                      0x0000000105cdacd8 _CF_forwarding_prep_0 + 120
     5   Help                                0x000000010212f424 -[RKMapperOperation mapRepresentationOrRepresentations:atKeyPath:usingMapping:] + 132
     6   Help                                0x000000010212fe97 -[RKMapperOperation mapSourceRepresentationWithMappingsDictionary:] + 1959
     7   Help                                0x00000001021307a2 -[RKMapperOperation main] + 1330
     8   Foundation                          0x00000001034c4774 -[__NSOperationInternal _start:] + 645
     9   Help                                0x00000001021310b7 -[RKMapperOperation execute:] + 39
     10  Help                                0x0000000101f62f8e -[AppDelegate fetchJobsFromDB] + 1102
更多详细信息

更新到
RestKit 0.26.0
,我仍然面临这个问题

基本上,在
rkmapperooperation.m
中,第333行a
po mapping.forceCollectionMapping
给出了一个错误,导致应用程序崩溃

答案:样品溶液 使用
RKMappingOperation
,因为我们不必指定键路径

    RJobObject * rrrJob = [RJobObject new];
    RKMappingOperation *mappingOperation = [[RKMappingOperation alloc] initWithSourceObject:jobEntity.dictionary destinationObject:rrrJob mapping:[RJobObject mapping]];
    mappingOperation.dataSource = (id)rrrJob;
    [mappingOperation start];

对于您试图执行的操作,“parsedData”应该是一个从JSON字符串反序列化的字典或数组,
[RJobObject mappingDictionary]
应该是一个字典,其中键是源键路径,值是定义如何处理内容的
RKMapping
实例

其思想是,关键路径决定如何钻取JSON数据,映射决定如何处理在其中找到的内容。如果要处理整个JSON数据,则密钥路径可能是空字符串


您可以考虑使用<代码> RKMAPPIGN操作,如果您想避免关键路径复杂性,将整个JSON映射到单个目标对象。

显示您所拥有的代码并给出崩溃的详细信息,包括消息和堆栈。trace@Wain:添加了代码、堆栈跟踪以及更多信息。如果可以的话,请帮忙。感谢感谢您提出的
RKmappingOperation
,我们已将解决方案作为答案发布在问题中。但是有一个问题,正如您所看到的,我必须输入一个
DestinationObject
以及一个
DataSource
作为同一个对象,这不是多余的。在什么情况下,这两种情况会有所不同?IIRC在这种情况下,您不需要数据源。数据源提供需要创建的实例,特别是对于核心数据和多实例结果集。