【问题标题】:RestKit Entity Mapping and Parent Entity MappingRestKit 实体映射和父实体映射
【发布时间】:2012-05-25 04:39:08
【问题描述】:

我有一个 Person 类(名字和姓氏的属性)和另一个实体 Worker(工资和头衔的属性)。在我的核心数据模型中,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的新手,但据我了解,您必须以某种方式在您的密钥路径中包含“工人:”,并认为这会做到这一点。为什么叫作工却不返工资和职称?
  • 谢谢,我试试看!对于您的问题,我只是快速将其放在一起,尚未添加这些值。
  • 也许你也可以尝试一下:[personMapping mapKeyPath:@"workers.firstName" toAttribute:@"firstName"];

标签: objective-c cocoa-touch core-data restkit


【解决方案1】:

您并没有告诉对象映射器对firstNamelastName 字段做任何事情。您只为wagetitle 定义了映射。为了让您的播种工作,您需要为 JSON 的结构以及您的 Web 服务定义映射,并添加如下内容:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2013-03-04
    • 2016-10-22
    • 2021-10-28
    相关资源
    最近更新 更多