2011-10-08 8 views
7

मैं मूल डेटा में नया हूं इसलिए मुझे कुछ प्रश्न हैं। मैं दोकोर डेटा डालने और कई रिश्ते इकाइयों को लाने के लिए

से पूछूंगा 1) मेरे पास टीम और टीम मेम्बर नामक दो इकाइयां हैं। उनके पास बहुत से संबंध हैं यानी एक टीम के कई सदस्य हो सकते हैं। सबसे पहले कृपया मॉडल के निम्नलिखित आरेख और .h फाइलों पर एक नज़र डालें और मुझे बताएं कि मैंने टीम और टीम मेम्बर के बीच कई रिश्तों को सही किया है (मुझे लगता है कि मैंने विपरीत संबंध बनाए हैं)।

enter image description here

Teams.h

#import <CoreData/CoreData.h> 

@class TeamMembers; 

@interface Teams : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSString * team_name; 
@property (nonatomic, retain) NSString * color; 
@property (nonatomic, retain) NSString * points; 
@property (nonatomic, retain) TeamMembers * members; 

@end 

TeamMembers.h

#import <CoreData/CoreData.h> 

@class Teams; 

@interface TeamMembers : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSString * member_name; 
@property (nonatomic, retain) NSSet* teams; 

@end 


@interface TeamMembers (CoreDataGeneratedAccessors) 
- (void)addTeamsObject:(Teams *)value; 
- (void)removeTeamsObject:(Teams *)value; 
- (void)addTeams:(NSSet *)value; 
- (void)removeTeams:(NSSet *)value; 

@end 

2) कृपया मैं डालने टीम तो अपने टीम के सदस्यों को सम्मिलित करने के लिए नमूना कोड की जरूरत है। साथ ही विशेष टीम के टीम के सदस्यों को कैसे लाया जाए।


मैं कोड का टुकड़ा निम्नलिखित का उपयोग कर रहा टीमें और टीम के सदस्यों संस्थाओं में डालने के लिए, लेकिन यह NSSet में टीम के सभी सदस्यों नहीं लौटा रहा है संपादित। यह परिणाम सेट

self.context = [del managedObjectContext]; 

      Teams *teamobj = [NSEntityDescription 
          insertNewObjectForEntityForName:@"Teams" 
          inManagedObjectContext:context]; 
      teamobj.team_name = teamname.text; 
      teamobj.color = [NSString stringWithFormat:@"%d", color]; 
      teamobj.points = [NSString stringWithFormat:@"%d", 0]; 

      for(UITextField *view in self.scrollview.subviews) 
      { 
       if([view isKindOfClass:[UITextField class]]) 
       { 
        if ([view tag] == 99) { 
         if (![view.text isEqualToString:@""]) { 
          noone = YES; 
          TeamMembers *teammember = [NSEntityDescription 
               insertNewObjectForEntityForName:@"TeamMembers" 
               inManagedObjectContext:context]; 
          teammember.member_name = view.text; 
          teammember.teams = teamobj; 

          [teamobj addMembersObject:teammember]; 
         } 
        } 
       } 
      } 
if (![context save:&error]) { 
       NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure" message:@"Unable to save team at the moment." delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil]; 
       [alert show]; 
       [alert release];    
      } 

उत्तर

8

हां, आपने विपरीत संबंध बनाए हैं। आपके पास एक टीम सदस्य है जिसमें कई टीम हैं और एक सदस्य से संबंधित एक टीम है। आप संबंध रेखा पर तीर से बता सकते हैं: डबल तीर का अर्थ है 'बहुत सारे हैं' और एकल तीर का अर्थ है 'एक है' या 'से संबंधित' (तीर इंगित करने वाली दिशा में पढ़ें)।

आपको मॉडल नेविगेटर में दिशा स्विच करनी चाहिए, मौजूदा जेनरेटेड कक्षाओं को मिटाएं और फिर उन्हें फिर से उत्पन्न करें।

जब आपके पास रिश्ते सही तरीके से स्थापित होते हैं तो आप एक टीम में सदस्यों को जोड़ने और किसी विशेष टीम के सदस्यों को पुनर्प्राप्त करने के लिए जेनरेट किए गए एक्सेसर्स का उपयोग कर सकते हैं।

TeamMember *newTeamMember = [NSEntityDescription insertNewObjectForEntityForName:@"TeamMember" inManagedObjectContext:context]; 
newTeamMember.team = <existing team managed object> 

ऐसा नहीं है कि के रूप में सरल है:

संपादित एक टीम के लिए एक नई टीम के सदस्य जोड़ने का उदाहरण दिखाने के लिए। कोर डेटा यह सुनिश्चित करेगा कि रिवर्स रिलेशनशिप स्वचालित रूप से अपडेट हो जाए, इसलिए टीम के सदस्य सदस्य संग्रह में आपके द्वारा जोड़े गए नए सदस्य शामिल होंगे।

+0

उत्तर के लिए धन्यवाद।क्या आप विशेष टीम –

+0

के लिए TeamMembers में सम्मिलित करने का एक उदाहरण दिखा सकते हैं। यह भी आपकी संस्थाओं को एकवचन वस्तुओं के रूप में बहुवचन के रूप में नामित करने का सम्मेलन है; तो 'टीम' और 'टीममेम्बर', 'टीम' और 'टीममेम्बर' नहीं। –

+0

नमूना कोड दिखाने के लिए धन्यवाद। क्या आप यह भी दिखा सकते हैं कि टीम के सदस्यों के एनएसएससेट को टीम में कैसे जोड़ा जाए? –

1

मुझे आशा है कि लिंक काम करता है। http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdCreateMOs.html#//apple_ref/doc/uid/TP40001654-CJBDBHCB

सेब दस्तावेज़ वास्तव में यहां स्पष्ट हैं।

NSManagedObject *newTeam = [NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:context];

1

हो सकता है कि मेरा उत्तर बहुत देर हो चुकी होगी, लेकिन भूल जाइए "से-अनेक संबंध" "संबंध" गुण विंडो में जांच नहीं करते। महत्वपूर्ण नियम के साथ-साथ "बहुत से रिश्ते" को हटाएं।

हो सकता है कि यह भी सहायक हो जाएगा, मैं NSMutableArray से संबंधित वस्तुओं डालने कर रहा हूँ निम्नलिखित कोड द्वारा:

NSSet *itemsSet; 
[itemsSet setByAddingObjectsFromArray:YOUR_NSMUTABLEARRAY]; 
[MAIN_OBJECT addItems:itemsSet]; 
संबंधित मुद्दे