2012-11-05 15 views
5

सेट करने के बजाय सेट करने के लिए कई रिश्तों को पुनर्स्थापित करें मेरे पास आईओएस रेस्टकिट से संबंधित प्रश्न है। मेरे पास रिमोट सर्वर से आने वाले अभिभावक-बाल संबंध डेटा हैं और उन ऑब्जेक्ट को NSManagedObject ऑब्जेक्ट को Restkit के साथ मैप करें। समस्या जो मैं वर्तमान में कर रहा हूं वह सर्वर के हर अनुरोध को हमेशा "बच्चे" रिश्ते को मिटा देता है और सर्वर से आने वाले नए डेटा के साथ इसे प्रतिस्थापित करता है। क्या उनसे बचने और इसके बजाय नए बच्चे को जोड़ने का कोई तरीका है?एक नया सेट

उदाहरण के लिए: मेरे पास क्लासिक श्रेणी -> उत्पाद संबंध है।

{"categories": [ 
    { 
     "cat_id": "1", 
     "cat_title": "category 1", 
     "cat_tag": 1, 
     "product": [ 
      { 
       "prod_id": "1", 
       "prod_name": "product 1", 
       "prod_tag": 1 
      }, 
      { 
       "prod_id": "2", 
       "prod_name": "product 2", 
       "prod_tag": 1 
      } 
     ] 
    } 
] } 

और वह ठीक काम करता है और सब कुछ CoreData पर रिश्ते के साथ ठीक से सहेजा गया है। लेकिन अगर मैं सर्वर से एक और अनुरोध बनाने के लिए और एक नया प्रतिक्रिया:

{"categories": [ 
    { 
     "cat_id": "1", 
     "cat_title": "category 1", 
     "cat_tag": 1, 
     "product": [ 
      { 
       "prod_id": "3", 
       "prod_name": "product 3", 
       "prod_tag": 1 
      }, 
      { 
       "prod_id": "4", 
       "prod_name": "product 4", 
       "prod_tag": 1 
      } 
     ] 
    } 
] } 

मैं उत्पाद 3 और उत्पाद 4 डेटाबेस पर उत्पाद 1 और उत्पाद 2 की जगह होगा। मुझे यकीन है कि मैं सभी रिश्तों और प्राथमिक कुंजी को सही ढंग से सेटअप करता हूं। (cat_id और prod_id दोनों प्राथमिक कुंजी के रूप में सेट हैं)।

RestKit के आंतरिक ढांचे के माध्यम से जांच की है, मैंने देखा है RKObjectMappingOperation कक्षा में चारों ओर line 576, है कि वहाँ

RKLogTrace(@"Mapped NSSet relationship object from keyPath '%@' to 
      '%@'. Value: %@", relationshipMapping.sourceKeyPath, 
      relationshipMapping.destinationKeyPath, destinationObject); 

NSMutableSet *destinationSet = [self.destinationObject 
         mutableSetValueForKey:relationshipMapping.destinationKeyPath]; 
[destinationSet setSet:destinationObject]; 

तो मुझे लगता है कि यह सिर्फ बदलने के लिए आसान है

[destinationSet setSet:destinationObject];

से

[destinationSet addObjectsFromArray:[destinationObject allObjects]]

लेकिन मैं सोच रहा था कि ऐसा करने का एक बेहतर तरीका है या नहीं?

चीयर्स,

उत्तर

2

Reskit से समर्थन के लिए धन्यवाद। अब यह RKRelationshipMapping द्वारा समर्थित है। (https://github.com/RestKit/RestKit/issues/989)

बस RKUnionAssignmentPolicy

को RKRelationshipMapping उदाहरण के assignmentPolicy मान सेट
संबंधित मुद्दे