के बिना रीस्टकिट ऑब्जेक्ट मैपिंग रिलेशनशिप रीस्टकिट के लिए Object Mapping-Guide on GitHub पढ़ने के बाद मेरी समस्या गायब नहीं हुई, इसलिए शायद कोई कह सकता है कि RestKit निम्न विचार से निपट सकता है या नहीं। रिश्तेकेवीसी
Company
- unitID
- companyID
- name
- contacts* (Company -->> Contact | 1:n)
Contact
- unitID
- companyID
- contactID
- lastName
- firstName
- account* (Contact >--> Company | 1:1)
JSON (कंपनी) के साथ
संस्थाओं
[
{
"unitID":"003CABD8DEB5DC13C",
"companyID":"BSP-002999",
"name":"Testcompany"
}
]
JSON (संपर्क)
[
{
"unitID":"DAC2ACCC125795D00",
"companyID":"BSP-002999",
"contactID":"CLP-015468",
"firstName":"Mister",
"lastName":"Wayne"
}
]
सीमाओं के कारण मैं कंपनियों में संबंधित संपर्कों को घोंसला नहीं कर पा रहा हूं (अन्यथा मैं इसे नहीं लिखूंगा), इसलिए जब मैं आयात पर डेटा मैप किया जाता हूं तो मैं यह उपयोग करना चाहता हूं।
प्रश्न
यह कंपनी RestKit द्वारा दिए गए तरीकों के साथ आयात पर (विशेषता companyID द्वारा की पहचान) संबंधित है के लिए प्रत्येक संपर्क मैप करने के लिए संभव है?
यदि नहीं, तो मैं इसके लिए सबसे अच्छा समाधान जानना चाहता हूं। धन्यवाद!
पृष्ठभूमि
इस एप्लिकेशन के अपने पहले निर्माण में मैं दिया संस्थाओं के लिए वस्तुओं (रिश्तों के बिना) एक कंपनी को विधेय companyID साथ मैप किया और दिलवाया गया है सभी संबंधित संपर्कों =% @। डेटा की मात्रा (4000+ कंपनियां, 7000+ संपर्क) के कारण सभी संबंधित संपर्कों को लाने में लगभग एक सेकंड लगता है - इसलिए मैं संबंधों का उपयोग करने के विचार के साथ आया (जो स्थानीय डमी डेटा के साथ सही काम करता है)।
समाधान
मेरे वर्तमान मानचित्रण नीचे दिए गए जवाब की मदद से निम्नलिखित (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
...
आप इस उदाहरण के अपने काम समाधान का हिस्सा कर सकते हैं? :) बस मैपिंग के लिए –
एक उदाहरण कॉन्फ़िगरेशन के साथ उपरोक्त मेरी प्रविष्टि को अपडेट किया गया। आशा करता हूँ की ये काम करेगा! – flashfabrixx