ios - 地幔是否需要完全指定模型?

标签 ios json mapping

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

提前致谢

最佳答案

仔细检查代码后,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 调用并手动应用转换。

关于ios - 地幔是否需要完全指定模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29335308/

相关文章:

ios - UINavigationController 隐藏单个 View Controller 的导航栏

iphone - iPhone 应用程序的开发版本何时到期?

c# - 将 JSON 对象传递到列表中

python - 从Python中的递归函数返回

html - 调整字体大小后 WKWebView contentSize 高度不改变

ios - Apple 是否为没有 Mac 设备的程序员提供开发 iOS 安装程序?

java - 重用 Gson 解析的已经实例化的对象

python - 使用Python搜索json并返回列表

javascript - 如何通过相同的键从对象数组创建数组

python - 从 t-SNE 图中获取 ID?