当 Restkit 尝试映射时,带有字符串字段(包含 JSON 字符串)的 Json 崩溃
Posted
技术标签:
【中文标题】当 Restkit 尝试映射时,带有字符串字段(包含 JSON 字符串)的 Json 崩溃【英文标题】:Json with field of string(containing a string of JSON) crashes when Restkit tries to map it 【发布时间】:2015-01-16 01:24:39 【问题描述】:我正在发送一个包裹在 Iron mq 消息中的 json blob。
Restkit 作为一个:
id:"2837409187409328",
delay:60,
body:" myJson: "hey":true"
我使用 rkrelationship 将子对象映射到主体:作为 CustomObject 类型。
但是,当 Restkit 尝试映射到该自定义对象时,它会崩溃,因为它将“body”视为 NSString 而不是 NSDictionary,并尝试使用 sourceKeyPath 从生成的 sourceObject 中获取值...但由于它一个 NSString 它爆炸了。与:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x7fcf91165060> valueForUndefinedKey:]: this class is not key value coding-compliant for the key alreadyLiked.'
我尝试使用动态映射并将表示替换为 NSDictionary。
我已尝试按照文档中的建议对访问器进行验证,但从未调用过该代码。 有什么想法吗?
【问题讨论】:
在这里发现了一个类似的问题:***.com/questions/22257516/… 通过后期处理解决。我最终获取了传递给主体的字符串,覆盖了该主体属性的设置器,并在该设置器中运行映射操作以获取 json 字符串,并将其映射到我的自定义对象(在转换为字典之后)然后将其设置在我的父对象上。 请将您的解决方案添加为答案并接受它:-) 你去@Wain。带代码和所有 ;) 【参考方案1】:通过后期处理解决。我最终获取了传递给主体的字符串,覆盖了该主体属性的设置器,并在该设置器中运行映射操作以获取 json 字符串,并将其映射到我的自定义对象(在转换为字典之后)然后将其设置在我的父对象上。
希望对您有所帮助!
//here I have an object with a string property called Body that contains JSON.
//I extract the json, turn it into a dictionary then map it to another property on that same object that actually has a relationship mapping...
//always check to see if the body actually exists before you try to map it
//otherwise you will have a crash in your overridden setter..
if(self.Body)
NSData *data = [self.Body dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSDictionary *representation = json;
//NSDictionary *metadata = @ @"URL": [NSURL URLWithString:@"http://restkit.org"]http://restkit.org"] ;
RKObjectMapping *objectMapping = [MyObject mapping];
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:representation destinationObject:mappedResultDTO mapping:objectMapping];
RKObjectMappingOperationDataSource *dataSource = [RKObjectMappingOperationDataSource new];
operation.dataSource = dataSource;
// [operation start];
NSError *error = nil;
BOOL success = [operation performMapping:&error];
【讨论】:
以上是关于当 Restkit 尝试映射时,带有字符串字段(包含 JSON 字符串)的 Json 崩溃的主要内容,如果未能解决你的问题,请参考以下文章