1

我有时从服务器得到的响应是一个 JSON,代表一个像这样的空对象 {}

我已经在这里阅读了这个问题/答案,其中指出我应该实现 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返回nil ...所以当应用程序尝试使用nil对象创建NSDictionary时崩溃。

4

1 回答 1

1

将作业分成两行。

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

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

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

于 2012-08-21T00:12:20.527 回答