我是核心数据的新手,因此我几乎没有问题。我会问两个
1)我有两个名为Team和TeamMembers的实体。他们有很多关系,即一个团队可以有很多成员。首先请看下面的图表和那些模型的.h文件,让我知道我是否在团队和团队成员之间建立了正确的多对多关系(我感觉我已经建立了相反的关系)。
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)我需要示例代码插入Team然后插入其团队成员。还有如何获取特定团队的团队成员。
EDITED 我正在使用以下代码插入团队和团队成员实体,但它没有返回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];
}
答案 0 :(得分:8)
是的,你已经建立了相反的关系。您有一个团队成员,有许多团队和一个属于一个成员的团队。您可以通过关系线上的箭头来判断:双箭头表示“有很多”,单箭头表示“有一个”或“属于”(按箭头指向的方向读取)。
您应该在模型导航器中切换方向,废弃现有生成的类,然后重新生成它们。
如果您正确设置了关系,那么您可以使用生成的访问者向团队添加成员并检索特定团队的成员。
编辑以显示向团队添加新团队成员的示例:
TeamMember *newTeamMember = [NSEntityDescription insertNewObjectForEntityForName:@"TeamMember" inManagedObjectContext:context];
newTeamMember.team = <existing team managed object>
就这么简单。核心数据将确保反向关系自动更新,因此团队成员的团队成员将包括您刚刚添加的新成员。
答案 1 :(得分:1)
苹果文档在这里非常清楚。
NSManagedObject *newTeam = [NSEntityDescription insertNewObjectForEntityForName:@"Team"
inManagedObjectContext:context];
答案 2 :(得分:1)
也许我的答案为时已晚,但不要忘记在“关系”属性窗口中选中“To-Many Relationship”。删除重要规则以及“多对多关系”。
也许这也会有所帮助,我通过以下代码从NSMutableArray插入相关对象:
NSSet *itemsSet;
[itemsSet setByAddingObjectsFromArray:YOUR_NSMUTABLEARRAY];
[MAIN_OBJECT addItems:itemsSet];