4

我认为这个问题适用于我的情况,但是我缺乏 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?

4

0 回答 0