2011-10-08 33 views
7

Tôi mới làm quen với dữ liệu cốt lõi do đó tôi có một vài câu hỏi. Tôi sẽ hỏi hai sốChèn dữ liệu lõi và tìm nạp nhiều thực thể mối quan hệ

1) Tôi có hai thực thể tên là Team và TeamMembers. Họ có nhiều mối quan hệ, tức là một nhóm có thể có nhiều thành viên. Trước tiên, hãy xem sơ đồ sau và tệp .h của các mô hình đó và cho tôi biết liệu tôi đã thực hiện đúng mối quan hệ nhiều giữa Nhóm và TeamMembers (Tôi có cảm giác rằng tôi đã tạo ra mối quan hệ ngược lại).

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) Xin vui lòng tôi cần mẫu mã cho chèn Đội bóng sau đó chèn thành viên trong nhóm của mình. Ngoài ra Làm thế nào để lấy các thành viên trong nhóm của nhóm cụ thể.


EDITED Tôi đang sử dụng đoạn mã sau đây để chèn vào các nhóm và thành viên trong nhóm thực thể nhưng nó không được trả lại tất cả thành viên trong nhóm trong NSSet. Chỉ trả lại một thành viên trong nhóm kết quả là

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];    
      } 

Trả lời

8

Có, bạn đã tạo ra mối quan hệ ngược lại. Bạn có một thành viên trong nhóm có nhiều đội và một đội thuộc một thành viên. Bạn có thể biết bằng các mũi tên trên dòng quan hệ: mũi tên kép có nghĩa là 'có nhiều' và mũi tên đơn có nghĩa là 'có một' hoặc 'thuộc về' (đọc theo hướng mũi tên đang trỏ).

Bạn nên chuyển hướng trong trình điều hướng mô hình, loại bỏ các lớp đã tạo hiện tại rồi tạo lại chúng.

Khi bạn thiết lập mối quan hệ chính xác, bạn có thể sử dụng trình truy cập được tạo để thêm thành viên vào nhóm và truy xuất thành viên cho một nhóm cụ thể.

EDIT để hiển thị ví dụ về việc thêm một thành viên trong nhóm mới cho một nhóm:

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

Đó là đơn giản như vậy. Dữ liệu cốt lõi sẽ đảm bảo rằng mối quan hệ ngược lại được cập nhật tự động, do đó, bộ sưu tập teamMembers của nhóm sẽ bao gồm thành viên mới mà bạn vừa thêm vào.

+0

Cảm ơn bạn đã trả lời.Bạn có thể vui lòng cho thấy một ví dụ về chèn trong TeamMembers cho đội đặc biệt –

+0

Nó cũng là quy ước để đặt tên cho các thực thể của bạn như là đối tượng số ít không số nhiều; vì vậy 'Nhóm' và 'TeamMember', không phải 'Đội' và 'Đội trưởng'. –

+0

Cảm ơn bạn đã hiển thị mã mẫu. bạn có thể vui lòng cho biết cách thêm NSSet của các thành viên trong nhóm vào một nhóm không? –

1

Có lẽ câu trả lời của tôi sẽ là quá muộn, nhưng đừng quên kiểm tra "To-Nhiều mối quan hệ" trong cửa sổ "Mối quan hệ" bất động sản. Xóa quy tắc quan trọng cũng như "Quan hệ nhiều người".

Có lẽ đây cũng sẽ rất hữu ích, tôi chèn đối tượng có liên quan từ NSMutableArray bằng đoạn mã sau:

NSSet *itemsSet; 
[itemsSet setByAddingObjectsFromArray:YOUR_NSMUTABLEARRAY]; 
[MAIN_OBJECT addItems:itemsSet]; 
Các vấn đề liên quan