Objective c RestKit-使用空值/空数组映射JSON响应
在RestKit获取期间,如何优雅地处理(预期的)nil密钥路径 当我在用户没有任何事件的情况下调用getAllEvents API时,API将在有效负载中返回空值,例如Objective c RestKit-使用空值/空数组映射JSON响应,objective-c,ios,json,null,restkit,Objective C,Ios,Json,Null,Restkit,在RestKit获取期间,如何优雅地处理(预期的)nil密钥路径 当我在用户没有任何事件的情况下调用getAllEvents API时,API将在有效负载中返回空值,例如{“events”:null}。null值导致调用RestKitrequest:didFailLoadWithError和objectLoader:didFailWithError方法,我不一定希望调用这些方法,因为这是存在0个事件的预期行为。它给出的错误消息是找不到keyPath的对象映射:“” 我是否可以在映射配置和/或委托
{“events”:null}
。null值导致调用RestKitrequest:didFailLoadWithError
和objectLoader:didFailWithError
方法,我不一定希望调用这些方法,因为这是存在0个事件的预期行为。它给出的错误消息是找不到keyPath的对象映射:“”
我是否可以在映射配置和/或委托方法中处理此问题,或者我是否需要修改API,也许是为了返回空字符串而不是null。当列表为空时,JSON应该返回什么有一个标准吗
当列表为空时,JSON应该返回什么有一个标准吗
实际上我不知道,但我会选择一个空数组:
{ 'events' : [] }
如果一个值为空,我就根本不发送它[节省带宽]
编辑:
当列表为空时,JSON应该返回什么有一个标准吗
实际上我不知道,但我会选择一个空数组:
{ 'events' : [] }
如果一个值为空,我就根本不发送它[节省带宽]
编辑:。更新:这不再适用于RestKit v0.10.x以外的版本。见@moonwave99的答案 找到了解决办法 最后我做了一些与moonwave的建议非常相似的事情,只是我现在将null对象更改为空数组
- (void)objectLoader:(RKObjectLoader*)loader willMapData:(inout id *)mappableData {
id events = [*mappableData objectForKey:@"events"];
if (events == [NSNull null]) {
NSLog(@"it's null");
[*mappableData setObject:@"" forKey:@"events"];
}
}
为了成功处理现在为空的非空数组,我必须告诉事件映射忽略未知的密钥路径
[eventsMapping setIgnoreUnknownKeyPaths:YES];
现在,RestKit不像我一直期望的那样调用didFailWithError委托方法,而是调用didLoadObjects。在尝试分配给本机Cocoa对象之前,我可以从中检查数组是否为空
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
if ([objects count] == 0) {
// No events, alert user
}
else if ([[objects objectAtIndex:0] isKindOfClass:[Events class]]) {
Events *events = [objects objectAtIndex:0];
}
更新:这不再适用于RestKit v0.10.x以外的版本。见@moonwave99的答案 找到了解决办法 最后我做了一些与moonwave的建议非常相似的事情,只是我现在将null对象更改为空数组
- (void)objectLoader:(RKObjectLoader*)loader willMapData:(inout id *)mappableData {
id events = [*mappableData objectForKey:@"events"];
if (events == [NSNull null]) {
NSLog(@"it's null");
[*mappableData setObject:@"" forKey:@"events"];
}
}
为了成功处理现在为空的非空数组,我必须告诉事件映射忽略未知的密钥路径
[eventsMapping setIgnoreUnknownKeyPaths:YES];
现在,RestKit不像我一直期望的那样调用didFailWithError委托方法,而是调用didLoadObjects。在尝试分配给本机Cocoa对象之前,我可以从中检查数组是否为空
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
if ([objects count] == 0) {
// No events, alert user
}
else if ([[objects objectAtIndex:0] isKindOfClass:[Events class]]) {
Events *events = [objects objectAtIndex:0];
}