更新:这不再适用于 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];
}