【问题标题】:Does Mantle require a Model to be fully specified?Mantle 是否需要完全指定模型?
【发布时间】:2015-06-02 19:47:59
【问题描述】:

我正在使用不断发展的 JSON。我最近开始使用 Mantle 编写代码来使用 JSON。对于我想做的事情来说,这似乎是一个非常好的选择。但是,似乎如果正在使用的 JSON 具有模型中不存在的属性,则 JSON 转换会失败。我正在使用[MTLJSONAdapter modelOfClass:fromJSONDictionary:error:]; 调用来映射 JSON。

提前致谢,

【问题讨论】:

    标签: ios json mapping


    【解决方案1】:

    在仔细检查代码后,Mantle 确实要求所有 json 属性映射到模型中的某些内容。否则,将发生的情况是该属性将引发异常。

    在 MTLModel 的MTLValidateAndSetValue 内部,它在设置属性之前不会检查属性是否存在。

    @try {
        if (![obj validateValue:&validatedValue forKey:key error:error]) return NO;
    
        if (forceUpdate || value != validatedValue) {
            [obj setValue:validatedValue forKey:key];
        }
    
        return YES;
    } @catch (NSException *ex) {
        NSLog(@"*** Caught exception setting key \"%@\" : %@", key, ex);
    
        // Fail fast in Debug builds.
        #if DEBUG
        @throw ex;
        #else
        if (error != NULL) {
            *error = [NSError mtl_modelErrorWithException:ex];
        }
    
        return NO;
        #endif
    }
    

    如果您使用的 JSON 不能保证与您的模型相匹配,这就会出现问题。
    我最终为我的工作做了一个自定义 JSON 表示,让构造函数基于传入的 JSON 而不是模型来构建对象。它将首先遍历 json 属性并尝试使用隐式映射将它们直接映射到模型属性。如果有任何属性需要特殊处理,则由子类来覆盖 init 调用并手动应用转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多