0

現在、Obj-C モデルを単純化しようとしていますが、json データにより、思ったよりも少し複雑になっているようです。配列データをブール値に変換できません。

私の知る限り、フレームワークのJSONKeyPathsByPropertyKeyを使用してキーが次のようなものであることを定義することは不可能です: @"gsRightIPServerStart", @"rights.name['RIGHT_IP_SERVERSTART'].granted" または少なくともシリアライズ辞書にアクセスする可能性使用されるクラス内。私のFNPServerクラス。

これは、使用する必要がある JSON 応答の一部です。

...,
isowner": false,
    "rights": 
    [

    {

        "name": "RIGHT_IP_SERVERSTART",
        "granted": true

    },
    {

        "name": "RIGHT_IP_SERVERREMOVE",
        "granted": true

    },
    {

        "name": "RIGHT_IP_SWITCHCONFIGMODE",
        "granted": true

    },

        {
            "name": "RIGHT_IP_SERVERCREATE",
            "granted": true
        }

    ]}

これは、ブール値として簡単に表現できる単純な配列です。この場合、いくつかの NSNumbers (CoreData):

@interface FNPServer : MTLModel <MTLJSONSerializing>
...
@property (nonatomic, strong) NSNumber * gsRightIPServerStart;
@property (nonatomic, strong) NSNumber * gsRightIPServerStop;
@property (nonatomic, strong) NSNumber * gsRightIPServerRestart;
@property (nonatomic, strong) NSNumber * gsRightIPServerModify;
@end

自分で変換を処理するために、このオブジェクトの生成中または生成後にソース dict を取得する解決策が見つかりません。

私は、いくつかの異なるクラスを作成し、プロパティをチェックして、単純な「はい」または「いいえ」の質問のために本格的なオブジェクトでいっぱいの配列を生成したくありません。「外部からの助け」がなくても機能するはずです。それ以外の場合は、データが存在するかどうかを確認する必要があります。

ありがとう

4

1 に答える 1

1

あなたの場合、 JSONKeyPathsByPropertyKey に必要なキーを直接与えることはできません。ただし、「rights」配列内の値が必要なプロパティの JSON キー パスとして「rights」を設定できます。次に、FNPServer 内にカスタム 'propertyNameJSONTransformer' メソッドを記述します。

「responseDictionary」に「rights」キーが含まれていると考える例を次に示します。

[MTLJSONAdapter modelOfClass:FNPServer.class fromJSONDictionary:responseDictionary error:&error];

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{ 
             @"gsRightIPServerStart" : @"rights",
             ...
             };
}

+ (NSValueTransformer *)gsRightIPServerStartJSONTransformer {
    return [MTLValueTransformer transformerUsingForwardBlock:^id(NSArray *rights, BOOL *success, NSError *__autoreleasing *error) {

        // here you have the 'rights' as an array
        // you can get the right value for gsRightIPServerStart within 'rights'
        // then return it by converting to an NSNumber
    }];
}
于 2015-10-19T19:41:55.657 に答える