将嵌套引用序列化为restkit中的同一个类

时间:2012-06-07 17:30:55

标签: objective-c ios restkit

我很难将序列化用于对象可能包含其他实例的对象。

例如对象: 人 NSString *名称 人*妈妈 这个JSON可能如下所示: {

"person": [

           {

            "name": "Blake Watters",

            "mother": {

                "name": "Jane Doe",

                "mother": {

                    "name":"Jane Smith",

                    "age":65

                }

            }

           }

        ]

}

我创建了映射:     RKObjectMapping * personMapping = [RKObjectMapping mappingForClass:[Person class]];

[personMapping mapAttributes:@"name", nil];

[personMapping mapKeyPath:@"mother" 
           toRelationship:@"mother" 
              withMapping:personMapping];

如果我对此执行逆映射以便我可以序列化对象,则会在不断添加映射时出现递归映射错误。

我能找到的唯一答案是在关系上设置“序列化:否”。这允许它反转然后序列化,但序列化当然是缺少母对象。

有解决方法吗?在我将其反转后,我可以手动将此序列化添加回对象吗?

编辑:

看起来之后添加它可能是实现此目的的方法,因为以下代码似乎有效。虽然感觉必须有更好的方式。

// Map name
RKObjectMapping* nameMapping = [RKObjectMapping mappingForClass:[Name class]];
[nameMapping mapAttributes:@"first",@"last", nil];

// Map person
RKObjectMapping* personMapping = [RKObjectMapping mappingForClass:[Person class] ];
[personMapping mapAttributes:@"age", nil];
[personMapping mapKeyPath:@"name" toRelationship:@"name" withMapping:nameMapping];

// Don't serialize mother
[personMapping mapKeyPath:@"mother" toRelationship:@"mother" withMapping:personMapping serialize:NO];

// Connect our mapping to RestKit's mapping provider
[[RKObjectManager sharedManager].mappingProvider setMapping:personMapping forKeyPath:@"person"];

// invert the mapping
RKObjectMapping* personSerialization = [personMapping inverseMapping];
RKObjectMapping* mapping = [[RKObjectManager sharedManager].mappingProvider 
                            serializationMappingForClass:[Person class]];
// Since mother wasn't serialized, add its relationship back in
[personSerialization mapKeyPath:@"mother" 
                 toRelationship:@"mother" 
                    withMapping:personSerialization];    
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:personSerialization 
                                                                forClass:[Person class]];

谢谢, 亚当

0 个答案:

没有答案