基于另一个属性的地幔属性类?

我怎样才能使用Github Mantle来select一个基于另一个属性在同一类的属性类? (或者在最坏的情况下,JSON对象的另一部分)。

例如,如果我有这样的对象:

{ "content": {"mention_text": "some text"}, "created_at": 1411750819000, "id": 600, "type": "mention" } 

我想做一个像这样的变压器:

 +(NSValueTransformer *)contentJSONTransformer { return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) { return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil]; }]; } 

但传递给变换的字典只包含JSON的“内容”部分,所以我没有访问“types”字段。 有没有办法访问对象的其余部分? 或者以某种方式将“内容”的模型类别基于“types”?

我以前被迫做这样的黑客解决scheme:

 +(NSValueTransformer *)contentJSONTransformer { return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) { if (contentDict[@"mention_text"]) { return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil]; } else { return [MTLJSONAdapter modelOfClass:ETActivityContent.class fromJSONDictionary:contentDict error:nil]; } }]; } 

您可以通过修改JSONKeyPathsByPropertyKey方法来传递types信息:

 + (NSDictionary *)JSONKeyPathsByPropertyKey { return @{ NSStringFromSelector(@selector(content)) : @[ @"type", @"content" ], }; } 

然后在contentJSONTransformer ,可以访问“type”属性:

 + (NSValueTransformer *)contentJSONTransformer { return [MTLValueTransformer ... ... NSString *type = value[@"type"]; id content = value[@"content"]; ]; } 

我有类似的问题,我怀疑我的解决scheme没有比你更好。

我有一个公共的基类,我的Mantle对象,每构build完成后,我调用一个configuration方法,让他们有机会build立依赖多个“基”(== JSON)属性的属性。

喜欢这个:

 +(id)entityWithDictionary:(NSDictionary*)dictionary { NSError* error = nil; Class derivedClass = [self classWithDictionary:dictionary]; NSAssert(derivedClass,@"entityWithDictionary failed to make derivedClass"); HVEntity* entity = [MTLJSONAdapter modelOfClass:derivedClass fromJSONDictionary:dictionary error:&error]; NSAssert(entity,@"entityWithDictionary failed to make object"); entity.raw = dictionary; [entity configureWithDictionary:dictionary]; // Give the new entity a chance to set up derived properties return entity; }