Sau khi đọc Object Mapping-Guide on GitHub cho RestKit vấn đề của tôi đã không biến mất, vì vậy có lẽ ai đó có thể nói nếu RestKit có thể đối phó với ý tưởng sau đây.RestKit Object Mapping mối quan hệ mà không cần KVC
Các đối tượng với mối quan hệ
Company
- unitID
- companyID
- name
- contacts* (Company -->> Contact | 1:n)
Contact
- unitID
- companyID
- contactID
- lastName
- firstName
- account* (Contact >--> Company | 1:1)
JSON (Công ty)
[
{
"unitID":"003CABD8DEB5DC13C",
"companyID":"BSP-002999",
"name":"Testcompany"
}
]
JSON (Liên hệ)
[
{
"unitID":"DAC2ACCC125795D00",
"companyID":"BSP-002999",
"contactID":"CLP-015468",
"firstName":"Mister",
"lastName":"Wayne"
}
]
Do hạn chế, tôi không thể lồng các liên hệ thuộc vào các công ty (nếu không tôi sẽ không viết thư này), vì vậy tôi muốn sử dụng khi dữ liệu được ánh xạ khi nhập.
Câu hỏi
Có thể để ánh xạ mỗi Contact to nó thuộc Công ty (được xác định bởi thuộc tính companyID) về nhập khẩu với các phương pháp do RestKit?
Nếu không, tôi muốn biết giải pháp tốt nhất cho nó. Cảm ơn!
nền
Trong xây dựng đầu tiên của tôi về ứng dụng này tôi đã ánh xạ các đối tượng để các đối tượng nhất định (mà không cần mối quan hệ) và lấy tất cả các địa chỉ liên lạc thuộc về một công ty với vị companyID =% @. Do số lượng dữ liệu (4000+ công ty, 7000+ Danh bạ) tìm nạp tất cả các địa chỉ liên hệ thuộc về mất khoảng một giây - vì vậy tôi đã đưa ra ý tưởng sử dụng quan hệ (hoạt động hoàn hảo với dữ liệu giả cục bộ).
Giải pháp
Với sự giúp đỡ của các câu trả lời đưa ra dưới đây lập bản đồ hiện tại của tôi trông giống như sau (RestKit V.10).
// Setting up Restkit with objectStore
...
// Init objectMapping for Class Company
companyMapping = [RKManagedObjectMapping mappingForClass:[Company class] inManagedObjectStore:objectStore];
[companyMapping mapKeyPath:@"unitID" toAttribute:@"unitID"];
[companyMapping mapKeyPath:@"companyID" toAttribute:@"companyID"];
[companyMapping mapKeyPath:@"name" toAttribute:@"name"];
companyMapping.setDefaultValueForMissingAttributes = NO;
companyMapping.primaryKeyAttribute = @"companyID";
// Init objectMapping for Class Contact
contactMapping = [RKManagedObjectMapping mappingForClass:[Contact class] inManagedObjectStore:objectStore];
[contactMapping mapKeyPath:@"unitID" toAttribute:@"unitID"];
[contactMapping mapKeyPath:@"companyID" toAttribute:@"companyID"];
[contactMapping mapKeyPath:@"contactID" toAttribute:@"contactID"];
[contactMapping mapKeyPath:@"lastName" toAttribute:@"lastName"];
[contactMapping mapKeyPath:@"firstName" toAttribute:@"firstName"];
contactMapping.setDefaultValueForMissingAttributes = NO;
contactMapping.primaryKeyAttribute = @"contactID";
// Init relationships
[contactMapping mapRelationship:@"company" withMapping:companyMapping];
[contactMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];
// Get objects from server
...
Ông có thể hãy chia sẻ giải pháp làm việc của bạn trong ví dụ này? :) Chỉ cần cho ánh xạ –
Cập nhật mục nhập của tôi ở trên với cấu hình ví dụ. Hy vọng nó giúp! – flashfabrixx