2012-05-17 32 views
6

Tôi có một lớp Person (thuộc tính của firstName và lastName) và một thực thể Worker (thuộc tính của tiền lương và tiêu đề). Trong mô hình Dữ liệu cốt lõi của tôi, thực thể Person được đặt làm cha của thực thể Worker. Trong thiết lập appdelegate tôi tôi lập bản đồ của tôi ...Bản đồ đối tượng RestKit và ánh xạ thực thể cha mẹ

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]; 

... trong people.json ...

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

... bây giờ khi tôi chạy này không có đối tượng là hạt giống. Làm thế nào để tôi thể hiện sự thật rằng lớp Worker có cùng ánh xạ với tư cách là Person? Tôi chỉ có thể thêm chúng vào bản đồ đó nhưng điều đó cảm thấy sai.

Ngoài ra khi đăng ký ánh xạ Người sử dụng ...

[objectManager.mappingProvider addObjectMapping:personMapping]; 

... Tôi không sử dụng phương pháp RKManagedObjectMapping setMapping: forKeyPath: bởi vì chúng ta sẽ không bao giờ trải qua chỉ là một người trong ứng dụng này và do đó chúng tôi sẽ không bao giờ lập bản đồ nó. Nhưng tôi vẫn muốn nó đăng ký. cho các thực thể con của Người.

+0

Bạn có thể thử điều này: [[RKObjectManager sharedManager] .mappingProvider setObjectMapping: personMapping forKeyPath: @ "workers"]? Tôi mới để restkit nhưng theo như tôi hiểu nó, bạn phải bằng cách nào đó bao gồm các "công nhân:" trong keypath của bạn và nghĩ rằng điều này sẽ làm điều này. Tại sao nó được gọi là công việc nhưng không trả lại tiền lương và chức danh? – Pfitz

+0

Cảm ơn, tôi sẽ thử! Đối với câu hỏi của bạn, tôi đã nhanh chóng ném nó lại với nhau và chưa thêm những giá trị đó. – rob5408

+0

có thể bạn cũng có thể eperiment với điều này: [personMapping mapKeyPath: @ "workers.firstName" toAttribute: @ "firstName"]; – Pfitz

Trả lời

0

Bạn không yêu cầu người lập bản đồ đối tượng làm bất cứ điều gì với các trường firstNamelastName. Bạn chỉ xác định ánh xạ cho wagetitle. Để cho hạt giống của bạn để làm việc, bạn cần xác định ánh xạ cho cấu trúc của JSON cũng như dịch vụ web của bạn và thêm một cái gì đó như:

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

Sau đó, khi bạn chạy seeding của bạn, mapper nhân viên của bạn sẽ biết cách ánh xạ các giá trị đó từ people.json của bạn tới các đối tượng Worker mới.

Các vấn đề liên quan