【问题标题】:RestKit - Map JSON response with null value/empty arrayRestKit - 使用空值/空数组映射 JSON 响应
【发布时间】:2012-09-13 22:17:40
【问题描述】:

如何在 RestKit GET 期间优雅地处理(预期的)nil 键路径?

当我调用 getAllEvents API 时,如果用户没有任何事件,API 将在有效负载中返回空值,例如{"events":null}。 null 值会导致调用 RestKit request: didFailLoadWithErrorobjectLoader: didFailWithError 方法,我不一定想要,因为这是有 0 个事件的预期行为。它给出的错误信息是Could not find an object mapping for keyPath: ''

我能否在映射配置和/或委托方法中处理这个问题,或者我是否需要修改 API,可能返回一个空字符串而不是 null。当列表为空时,JSON 应该返回什么有标准吗?

【问题讨论】:

    标签: objective-c ios json null restkit


    【解决方案1】:

    当列表为空时,JSON 应该返回什么有标准吗?

    实际上我不知道,但我会选择一个空数组:

    { 'events' : [] }
    

    如果一个值为空,我根本不会发送它[节省带宽]。

    编辑:see this answer too

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多