RestKit实体映射和父实体映射

6

我有一个Person类(拥有firstName和lastName属性)和另一个实体Worker(拥有wage和title属性)。在我的Core Data模型中,Person实体被设置为Worker实体的父实体。在我的AppDelegate中,我设置了我的映射...

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相同的映射关系?我可以将它们添加到该映射中,但感觉不太对。

另外,在注册Person映射时使用...

[objectManager.mappingProvider addObjectMapping:personMapping];

我不使用RKManagedObjectMapping方法的setMapping:forKeyPath:,因为在此应用程序中我们永远不会仅处理一个人(Person),因此也不会进行映射。但我仍希望它能够为Person的子实体注册。


你能试试这个吗:[[RKObjectManager sharedManager].mappingProvider setObjectMapping:personMapping forKeyPath:@"workers"]?我对RestKit还很陌生,但据我所知,你必须在你的keypath中以某种方式包含"workers:",我认为这样做就可以了。为什么它被称为工人,但不返回工资和职称呢? - Pfitz
谢谢,我会尝试一下!对于你的问题,我只是快速地把这些东西放在一起,还没有添加那些值。 - rob5408
也许你也可以尝试这个:[personMapping mapKeyPath:@"workers.firstName" toAttribute:@"firstName"]; - Pfitz
1个回答

0

你没有告诉对象映射器如何处理 firstNamelastName 字段。你只定义了 wagetitle 的映射关系。为了让你的种子数据正常工作,你需要定义 JSON 结构和 Web 服务的映射关系,并添加类似以下的内容:

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

然后,当您运行种子时,您的工作映射器将知道如何将那些值从您的people.json映射到您的新Worker对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接