6

Person クラス (firstName と lastName の属性) と別のエンティティ Worker (賃金と役職の属性) があります。私の 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 の子エンティティの場合。

4

1 に答える 1

0

firstNameオブジェクト マッパーにandlastNameフィールドで何かをするように指示しているわけではありません。wageとのマッピングのみを定義しましたtitle。シードを機能させるには、JSON の構造と Web サービスのマッピングを定義し、次のようなものを追加する必要があります。

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

次に、シードを実行すると、ワーカー マッパーはそれらの値をpeople.json新しいWorkerオブジェクトにマップする方法を認識します。

于 2012-06-19T01:00:51.757 に答える