我正在使用不断发展的JSON。最近,我开始编写使用Mantle使用JSON的代码。对于我想做的事情来说,这似乎是一个非常好的选择。但是,如果正在使用的JSON具有模型中不存在的属性,则JSON转换将失败。我使用[MTLJSONAdapter modelOfClass:fromJSONDictionary:error:];调用来映射JSON。
提前谢谢你,
发布于 2015-03-30 11:50:19
仔细检查代码后,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调用并手动应用转换。
https://stackoverflow.com/questions/29335308
复制相似问题