ios – 如何使用Mantle向父母添加关系?

我有这样的父/子课:

@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方法应该更容易.

点赞