我有这样的父/子课:
@interface Parent : MTLModel <MTLJSONSerializing>
- (void)someMethod;
@property a,b,c...; // from the JSON
@property NSArray *childs; // from the JSON
@end
@interface Child : MTLModel <MTLJSONSerializing>
@property d,e,f,...; // from the JSON
@property Parent *parent; // *not* in the JSON
@end
所有字段a到f都在JSON中,具有相同的名称(因此我的JSONKeyPathsByPropertyKey方法返回nil),并且正确设置了正确的JSONTransformer,以便父类中的childs数组包含Child类而不是NSDictionary.
一切都在向前发展.
但是,为了方便起见,我希望我的Child模型中的属性引用回拥有它的父级.所以在代码中我可以这样做:
[childInstance.parent someMethod]
如何用Mantle做到这一点?
我想,当父解析子的JSON并创建Child类时,要为自己添加一个ref. (用init方法??)
谢谢.
最佳答案 我通过重写MTLModel -initWithDictionary:error:方法来做到这一点.像这样的东西.
子界面:
@interface BRPerson : MTLModel <MTLJSONSerializing>
@property (nonatomic, copy, readonly) NSString *name;
@property (strong, nonatomic) BRGroup *group; // parent
@end
在父实现中:
- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue error:(NSError **)error {
self = [super initWithDictionary:dictionaryValue error:error];
if (self == nil) return nil;
// iterates through each child and set its parent
for (BRPerson *person in self.people) {
person.group = self;
}
return self;
}
技术说明:
如果你像我一样好奇,我已经尝试通过改变它的forwardBlock和reversibleBlock来调整MTLJSONAdapter.但我不能,因为它们在MTLReversibleValueTransformer超类中,并且该类在“MTLValueTransformer.m”中私有声明.所以上面的initWithDictionary方法应该更容易.