如何处理RestKit中的空对象{}

时间:2012-08-21 00:06:13

标签: objective-c ios restkit

我有时从服务器获得的响应是​​一个表示像{}

这样的空对象的JSON

我已经阅读了this question/answer over here,其中说明我应该实现willMapData委托函数并将* mappableData指向其他地方。问题是我无法弄清楚应该为* mappableData分配什么,以便我的应用程序不会崩溃。

我试过这个

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout id *)mappableData
{
    id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON]; 
    *mappableData = [parser objectFromString:@"{\"unknownObject\":\"\"}" error:nil];
}

但是,我的应用程序崩溃了一个相当小便的

    'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary   initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
你能救我吗?

更新 打开RKDebug消息在控制台中给出了这个:

Performing object mapping sourceObject: {
    }
and targetObject: (null)

然后代码到达RKObjectMapper.m:

if (mappableData) {
        id mappingResult = [self performMappingForObject:mappableData atKeyPath:@"" usingMapping:mappingsForContext];
        foundMappable = YES;
        results = [NSDictionary dictionaryWithObject:mappingResult forKey:@""];
    }

但是那里的mappingResult回来了......所以当app尝试使用nil对象创建一个NSDictionary时,应用程序会崩溃。

1 个答案:

答案 0 :(得分:1)

将作业分成两行。

SomeDataType *object =  [parser objectFromString:@"{\"unknownObject\":\"\"}" error:nil];

if(object){
  *mappableData = object;
}else{
  // You've got nil, do something with it
}

现在您可以检查nil值并采取适当的措施。该操作的作用取决于崩溃的上下文。