我认为这个问题适用于我的情况,但是我缺乏 Mantle 和 iOS 的一般经验已经结束了我的思路。基本上,我有一大块带有嵌套字典和数组的 JSON,我想将它们转换为 Mantle 对象。
"features": {
"App": {
"status": "_ACTIVE",
"unavailableReasons": [],
"modernCapabilities": [{
"capabilityType": "LOCK_AUTO_REPLY",
"providerStatuses": [{
"providerType": "MY_PROVIDER",
"status": false,
"unavailableReasons": ["NOT_SUPPORTED_BY_PRODUCT", "DEVICE_OS_NOT_SUPPORTED"]
}]
},
...
...
{
"capabilityType": "LOCK_CONTACT_WHITELIST",
"providerStatuses": [{
"providerType": "OTHER_PROVIDER",
"status": true,
"unavailableReasons": []
}]
}
]}
}
我希望能够实现与上面链接的解决方案类似的解决方案,即向下迭代“Features”键的字典,并对每个键/值对应用转换。因此,在这种情况下,对于“App”键和它的字典值(以及后来的“modernCapabilities”键和它的数组等)我知道对于后面的步骤,我需要单独的模型类,并且这些存在,但我在第一步中遇到了麻烦,即“App”键上的转换及其值。
这是我现在拥有的:
+ (NSValueTransformer *)featureTypesJSONTransformer {
NSValueTransformer *transformer = [NSValueTransformer valueTransformerForName:@"FeatureStatus"];
return [MTLValueTransformer transformerWithBlock:^NSDictionary *(NSDictionary *features) {
NSMutableDictionary *transformedValues = [[NSMutableDictionary alloc] init];
for (NSString *key in features) {
id transformedValue = [transformer transformedValue:[features objectForKey:key]];
if (transformedValue ) {
[transformedValues setObject:transformedValue forKey:key];
}
}
return transformedValues;
}];
}
正如您从代码中看到的那样,我试图保留密钥,并将其附加到一个新字典,其值为另一个转换,在这种情况下为 FeatureStatus (@{ "App" : })
问题是没有 [FeatureStatus changedValue:],尽管我确实有一个 JSONKeyPathsForPropetyKey,因为我想稍后映射“status”、“unavailableReasons”和“modernCapabilities”键。
我的下一步是什么?我怎样才能注册一个做我想做的事情的 ValueTransform?