2012-04-29 14 views
12

विदेशी कुंजी को एक विशेषता के रूप में स्टोर किए बिना रिश्ते को कनेक्ट कर सकते हैं, यानी सीधे JSON में कीपैथ से?विदेशी कुंजी के साथ RestKit ऑब्जेक्ट मैपिंग रिश्तों

विशेष रूप से, मेरे पास नौकरी है_मेनी कमरे के रिश्ते हैं। कमरे के JSON काम शामिल नहीं है, बल्कि, दोनों अलग लोड किए गए हैं:

- job: { 
    id: 1, 
    name: "John" 
} 

- room: { 
    id: 4, 
    job_id: 1, 
    name: "spare bedroom" 
} 

नौकरी कक्ष से पहले भरी हुई है।

मेरे CoreData मॉडल, नौकरी वर्तमान में मैं कमरे में करने के लिए एक @property (nonatomic, strong) NSNumber *jobID;, जो मैं @synthesize जोड़ने के लिए

@interface Job : NSManagedObject 
@property (nonatomic, retain) NSNumber * identifier; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSSet *rooms; 
@end 

@interface Room : NSManagedObject 
@property (nonatomic, retain) NSNumber * identifier; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) Job *job; 
@end 

गुण है।

JobMapping: 
    mapping = [RKManagedObjectMapping mappingForClass:[Job class]]; 
    [mapping setPrimaryKeyAttribute:@"identifier"]; 

    [mapping mapAttributes:@"name", nil]; 
    [mapping mapKeyPath:@"id" toAttribute:@"identifier"]; 

    [mapping mapRelationship:@"rooms" withMapping:[Room objectMapping]]; 



RoomMapping 
    mapping = [RKManagedObjectMapping mappingForClass:[Room class]]; 
    [mapping setPrimaryKeyAttribute:@"identifier"]; 

    [mapping mapAttributes:@"name", nil]; 
    [mapping mapKeyPath:@"id" toAttribute:@"identifier"]; 
    [mapping mapKeyPath:@"job_id" toAttribute:@"jobID"]; 

    [mapping mapRelationship:@"job" withMapping:[Job objectMapping]]; 

    [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"jobID"]; 

मैं वहाँ एक रास्ता मैं अतिरिक्त jobID संपत्ति के बिना ऐसा कर सकते हैं अगर सोच रहा था? मैं CoreData xcdatamodeld में जॉबआईड विशेषता नहीं लेना चाहता - यह अनावश्यक है, क्योंकि रिश्ते उसमें शामिल है।

अगर मैं एनएसएमएनेज्ड ऑब्जेक्ट्स का पुनर्निर्माण करता हूं, तो मुझे जॉबआईडी प्रॉपर्टी को फिर से जोड़ना होगा, जो थकाऊ है। क्या मैं JSON में job_id कीपैथ के माध्यम से कमरे को अपने संबंधित नौकरी से जोड़ने के लिए restkit नहीं कह सकता?

अगर मैं [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"]; लिए संपत्ति, mapKeyPath:@"job_id" लाइन अंतिम पंक्ति हटा दें, और बदल रहा

the entity Room is not key value coding-compliant for the key "job_id". 
+0

क्या आपको पता चला कि असली डेटा के संबंध में अनावश्यक आईडी संपत्ति के बिना कोर डेटा में रिश्ते को सही ढंग से कैसे कनेक्ट किया जाए? – thejaz

उत्तर

5

मैं JobId कोर डेटा में एक क्षणिक मूल्य होगा, और लिखने के लिए एक कस्टम सेट और इसके लिए प्राप्त हो ।

सेट self.job को = methodToReturnObjectMatchingJobId संबंध स्थापित करेगा (इस बाकी किट द्वारा इस्तेमाल किया जाएगा)

प्राप्त आप mogenerator का उपयोग नहीं कर रहे हैं, तो self.job.identifier

वापसी होगी , मैं सुझाव दूंगा कि आप इसे अपने सभी मूल डेटा आवश्यकताओं के लिए देखें।

नीचे कैसे मैं यह किया की नमूना कोड है:

-(void) setClaimId:(NSNumber *)claimId{ 
    Claim *propertyClaim=[Claim listItemFromId:[claimId intValue] withContext:self.managedObjectContext]; 

    self.claim=propertyClaim; 
} 
-(NSNumber*) claimId{ 

    return self.claim.referenceId; 
} 

जहां listItemFromId एक सरल प्रश्न है कि आईडी के आधार पर ऑब्जेक्ट है।

+0

क्या यह रीस्टकिट अनावश्यक रिलेशनशिप मैपिंग नहीं करता है? क्या मुझे Restkit के मानचित्रण को अक्षम करना चाहिए, या शायद setClaimId खाली छोड़ दें? – geon

+0

मैं जो कर रहा हूं वह मैपिंग या दावा आईडी का उपयोग कर रहा है और इसका उपयोग रिश्ते को बाकी के बाहर दावे ऑब्जेक्ट में सेट करने के लिए कर रहा है। तो इस मामले में रिश्ते के लिए आपके पास आराम में मैपिंग नहीं होगी (यदि यह है कि आप इसे कैसे कर रहे हैं)। –

संबंधित मुद्दे