3

Github からMantle フレームワークに関する問題が発生しました。私は次のことをしたい

@interface ClassA : MTLModel <MTLJSONSerializing>
@property(strong, non-atomic) ClassB *instanceOfB; 
@end

@implementation ClassA
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return [super.JSONKeyPathsByPropertyKey mtl_dictionaryByAddingEntriesFromDictionary:@{
            @"instanceOfB": @"user"
            }];
}

@interface ClassB : MTLModel <MTLJSONSerializing>
@property(strong, non-atomic) NSString *name; 
@end

@implementation ClassB
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return [super.JSONKeyPathsByPropertyKey mtl_dictionaryByAddingEntriesFromDictionary:@{
            @"name": @"user_name"
            }];
}

編集済み

を使用して のインスタンスClassAを JSONにシリアル化する[NSJSONSerialization dataWithJSONObject:[MTLJSONAdaptor JSONDictionaryFromModel:instanceOfA]と、JSON キーの下にネストされた B の選択されたプロパティを持つ次の JSON オブジェクトを取得したいと思いますuser

{ user: {
           user_name: <value of class B's name property>
        }
}

NSCoding と同じように、オブジェクト関係のツリーをたどる必要があると思います。この動作が既に実装されていて、それを使用する方法を理解できないのか、それとも自分でコーディングする必要があるのか​​ 疑問に思っています.

また、readme ファイル以外に、mantle フレームワークに関するドキュメントをもう少し見つけるのに苦労しています。

4

2 に答える 2

1

userJSONTransformerclassAにカスタムを追加することになりました。

+ (NSValueTransformer *)userJSONTransformer
{
    return [MTLValueTransformer reversibleTransformerWithBlock:^id(ClassB *b){
        return @{ @"user_name": b.name,
                };
    }];
}

正しいネストされたデータ構造が生成されるようになりました。

于 2013-03-13T21:13:53.047 に答える
0

NSValueTransformerreverseTransformedValueメソッドを使用できます。

+ (NSValueTransformer *)userJSONTransformer
{
    return [MTLValueTransformer reversibleTransformerWithBlock:^id(ClassB *b){
        return [[NSValueTransformer mtl_JSONDictionaryTransformerWithModelClass:[ClassB class]] reverseTransformedValue:b]
    }];
}
于 2015-02-05T23:38:41.523 に答える