2012-05-17 177 views
6

我有一个Person类(firstName和lastName属性),并形成其他单位职工(工资和职称的属性)。在我的Core Data模型中,Person实体被设置为Worker实体的父级。在我的AppDelegate设置我的映射......RestKit实体映射和父实体映射

RKManagedObjectMapping* personMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Person" inManagedObjectStore:objectManager.objectStore]; 
[personMapping mapKeyPath:@"firstName" toAttribute:@"firstName"]; 
[personMapping mapKeyPath:@"lastName" toAttribute:@"lastName"];  
[objectManager.mappingProvider addObjectMapping:personMapping]; 

RKManagedObjectMapping* workerMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Worker" inManagedObjectStore:objectManager.objectStore]; 
[workerMapping mapKeyPath:@"wage" toAttribute:@"wage"]; 
[workerMapping mapKeyPath:@"title" toAttribute:@"title"]; 
[objectManager.mappingProvider setMapping:workerMapping forKeyPath:@"workers"];  

RKManagedObjectSeeder* seeder = [RKManagedObjectSeeder objectSeederWithObjectManager:objectManager]; 
[seeder seedObjectsFromFiles:@"people.json", nil]; 

...在people.json ...

{ 
    "workers": 
    [ 
     { 
      "firstName":"Rob", 
      "lastName":"Johnson" 
     }, 
     { 
      "firstName":"John", 
      "lastName":"Roberts" 
     } 
    ] 
} 

...现在,当我运行这个没有对象接种。我如何表达这样一个事实,即Worker类与Person具有相同的映射关系?我可以将它们添加到该映射中,但感觉不对。

而且使用注册人映射时...

[objectManager.mappingProvider addObjectMapping:personMapping]; 

...我不使用RKManagedObjectMapping方法setMapping:forKeyPath:因为我们永远不会在这个应用等体验只是一个人我们永远不会映射它。但我仍然希望它注册。为人的子实体。

+0

你可以试试这个:[RKObjectManager sharedManager] .mappingProvider setObjectMapping:personMapping forKeyPath:@ “工人”]?我是restkit的新手,但据我了解,你必须以某种方式在你的keypath中包含“workers:”,并认为这将做到这一点。为什么它被称为工作,但不返回工资和头衔? – Pfitz

+0

谢谢,我会试一试!对于你的问题,我只是很快把它扔在一起,并没有添加这些值。 – rob5408

+0

也许你可以试试这个:[personMapping mapKeyPath:@“workers.firstName”toAttribute:@“firstName”]; – Pfitz

回答

0

您不告诉对象映射器对firstNamelastName字段执行任何操作。您只定义了wagetitle的映射。为了让您的播种工作,你需要定义的JSON结构的映射,以及您的网络服务,并添加类似:

[workerMapping mapKeyPath:@"workers.firstName" toAttribute:@"firstName"]; 
[workerMapping mapKeyPath:@"workers.lastName" toAttribute:@"lastName"]; 

然后,当你运行你播种,你的工人映射器就知道了如何将这些值从people.json映射到新的Worker对象。