在尝试单独执行该操作三天后,在阅读了大量主题后,无法在核心数据中配置一对多关系。
在我的应用程序中,我通过以下代码将所有新用户信息保存在名为Users的实体中:
Users *dataUsers = [NSEntityDescription insertNewObjectForEntityForName:@"Users" inManagedObjectContext:_managedObjectContext];
[dataUsers setUsername:usernameRegistration.text.capitalizedString];
[dataUsers setPassword:passwordRegistration1.text];
[dataUsers setEmailAddress:mail1.text];
[dataUsers setRightOrLeft:[NSNumber numberWithInteger:rightOrLeftHanded.selectedSegmentIndex ]];
NSError *error = nil;
if(![_managedObjectContext save:&error]) {
//handle the error
}
现在我在不同的视图控制器中调用所有这些信息来执行识别用户名 - 密码并访问下一页。
AppDelegate *appDelegate = (AppDelegate*) [[UIApplication sharedApplication]delegate];
_managedObjectContext=[appDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
NSEntityDescription *usersDescription= [NSEntityDescription entityForName:@"Users" inManagedObjectContext:_managedObjectContext];
[request setEntity:usersDescription];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"username" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
NSError *error = nil;
NSMutableArray *mutableFetchresults = [[_managedObjectContext executeFetchRequest:request error:&error]mutableCopy];
if(mutableFetchresults == nil) {
//handle error
}
[self setUsersData:mutableFetchresults];
// different steps for the recognition
好的,每个用户都可以登录并访问下一页。
现在,在下一页中,用户必须创建一个新会话。所以我创建了一个名为Sessions的新实体。每个用户可以有多个会话,但每个会话只与一个用户链接。
Sessions *session = [NSEntityDescription insertNewObjectForEntityForName:@"Sessions" inManagedObjectContext:_managedObjectContext];
NSNumber *howManySwingsSessionSaved = [NSNumber numberWithInteger:howManySwingsSession];
[session setName:_sessionNameTextField.text];
[session setHowManySwings:howManySwingsSessionSaved];
[session setClub:choosenClub];
NSDate *dateSaved = [NSDate date];
[session setDate:dateSaved];
NSError *error = nil;
if(![_managedObjectContext save:&error]) {
//handle the error
}
每个会话都已成功保存。 所以我的问题是:我如何链接与连接到我的应用程序的当前用户创建的新会话? 我想获得当前用户并为他添加这个新会话。 实际上我的代码分别保存每个用户和每个会话。
非常感谢所有帮助:)
谢谢你们!
编辑: 我已经在xcdmodel
中创建了这个关系答案 0 :(得分:0)
我想获得当前用户并为他添加这个新会话。其实 我的代码分别保存每个用户和每个会话。
您尚未向我们展示该模型,但您似乎需要向实体添加关系。您的Session
实体需要与User
建立一对一的关系,而反向关系应该是从User
到Session
的多对多关系。完成后,选择模型中的实体并使用Editor-> Create NSManagedObject Subclass ...`命令为每个实体生成子类。如果查看生成的头文件,您将找到一些可用于创建对象之间关系的访问器。您可能甚至不需要使用它们 - 例如,您可以执行以下操作:
Sessions *session = [NSEntityDescription insertNewObjectForEntityForName:@"Sessions" inManagedObjectContext:_managedObjectContext];
session.user = theCurrentUser;
答案 1 :(得分:0)
我终于成功了!!!! 可能有更好的解决方案,但这个可行,我希望它可能对将来的其他人有所帮助
在用户创建新会话的.m中
Sessions *session = [NSEntityDescription insertNewObjectForEntityForName:@"Sessions" inManagedObjectContext:_managedObjectContext];
NSNumber *howManySwingsSessionSaved = [NSNumber numberWithInteger:howManySwingsSession];
[session setName:_sessionNameTextField.text];
[session setHowManySwings:howManySwingsSessionSaved];
[session setClub:choosenClub];
NSDate *dateSaved = [NSDate date];
[session setDate:dateSaved];
//我在Sessions中插入一个新会话
for (int i = 0; i< [usersData count]; i++)
{ Users* users = (Users *) [usersData objectAtIndex:i];
if ([users.username isEqualToString: @"your_username"])
{
Users * currentUser = [usersData objectAtIndex:i];
[currentUser addSessionObject:session];
}
}
//我将usersData的每个用户名与我想要的用户名进行比较,我将其定义为currentUser,最后我添加了创建的会话。
NSError *error = nil;
if(![_managedObjectContext save:&error]) {
//handle the error
}
//我保存全部