gpt4 book ai didi

iphone - 核心数据插入和获取对多关系实体

转载 作者:可可西里 更新时间:2023-11-01 03:29:15 25 4
gpt4 key购买 nike

我是核心数据的新手,因此我几乎没有问题。我问两个

1) 我有两个名为 Team 和 TeamMembers 的实体。他们有一对多的关系,即一个团队可以有很多成员。首先请看下图和那里模型的.h文件,让我知道我是否在Team和TeamMembers之间建立了正确的对多关系(我感觉我建立了相反的关系)。

enter image description here

团队.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

团队成员.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];
}

最佳答案

是的,你建立了相反的关系。您有一个团队成员有多个团队,一个团队属于一个成员。您可以通过关系线上的箭头判断:双箭头表示“有很多”,单箭头表示“有一个”或“属于”(按箭头指向的方向阅读)。

您应该在模型导航器中切换方向,丢弃现有生成的类,然后重新生成它们。

正确设置关系后,您可以使用生成的访问器将成员添加到团队并检索特定团队的成员。

编辑以显示向团队添加新团队成员的示例:

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

就这么简单。 Core Data 将确保自动更新反向关系,因此团队的 teamMembers 集合将包含您刚刚添加的新成员。

关于iphone - 核心数据插入和获取对多关系实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com