2012-05-17 9 views
6

私はPersonクラス(firstNameとlastNameの属性)ともう1つのエンティティWorker(賃金とタイトルの属性)を持っています。私のコアデータモデルでは、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と同じマッピングを持っているという事実を表現しますか?私はそのマッピングにそれらを追加することができますが、それは間違っていると感じます。私たちは、このアプリケーションとそうでちょうど人を経験することは決してないだろうので:forKeyPath:また

使用している人のマッピングを登録...

[objectManager.mappingProvider addObjectMapping:personMapping]; 

...私はRKManagedObjectMappingメソッドsetMappingを使用していません私たちは決してそれをマッピングしません。しかし、私はまだそれを登録したい。人の子エンティティのために。

+0

これを試すことができますか?[[RKObjectManager sharedManager] .mappingProvider setObjectMapping:personMapping forKeyPath:@ "workers"]?私はRestkitを初めて使っていますが、理解している限り、あなたのキーパスに「労働者:」を何とか入れて、これがこれをすると思っています。なぜそれは労働と呼ばれますが、賃金と肩書を返さないのですか? – Pfitz

+0

ありがとう、私はそれを試してみましょう!あなたの質問には、私はすぐに一緒にこれを投げていたし、まだそれらの値を追加していない。 – rob5408

+0

多分あなたもこれと一緒にeperimentすることができます:[personMapping mapKeyPath:@ "workers.firstName" toAttribute:@ "firstName"]; – Pfitz

答えて

0

firstNameフィールドとlastNameフィールドを使用してオブジェクトマッパーに何も行わないとは限りません。 wagetitleのマッピングのみを定義しました。次に、あなたがあなたの播種を実行すると、あなたのワーカーマッパーが知っているだろう

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

:あなたの播種が動作するためには、あなたは、JSONの構造だけでなく、Webサービスのためのマッピングを定義し、のようなものを追加する必要がありますpeople.jsonの値を新しいWorkerオブジェクトにマップする方法

関連する問題