【问题标题】:One-To-Many Relationships Core Data一对多关系核心数据
【发布时间】:2014-08-13 15:21:49
【问题描述】:

经过三天尝试独自完成并阅读了很多主题后,无法在核心数据中配置一对多关系。

在我的应用程序中,我将所有新用户信息保存在一个名为“用户”的实体中:

 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 中创建了关系

【问题讨论】:

  • 为了存储用户名和密码,通常最好通过 NSURLCredentialStorage API 使用 Keychain 来存储。
  • 是的,我知道,但我的应用只是概念验证,所以没关系。我永远不会在苹果商店发布我的应用程序

标签: ios core-data entity-relationship


【解决方案1】:

我想获取当前用户并将他添加到这个新会话中。实际上 我的代码分别保存每个用户和每个会话。

您尚未向我们展示模型,但您似乎需要向实体添加关系。您的Session 实体需要与User 建立一对一关系,而反向关系应该是从UserSession 的一对多关系。完成后,选择模型中的实体并使用 Editor->Create NSManagedObject Subclass...` 命令为每个实体生成子类。如果查看生成的头文件,您会发现一些可用于创建对象之间关系的访问器。您甚至可能不需要使用它们——例如,您可以执行以下操作:

Sessions *session = [NSEntityDescription insertNewObjectForEntityForName:@"Sessions" inManagedObjectContext:_managedObjectContext];
session.user = theCurrentUser;

【讨论】:

  • 太棒了。那么是什么阻止您按照上述方式设置所需的关系?
  • 是的,对不起,我在您的帖子发布前几分钟进行了编辑,我已经为用户创建了 session.h 和 .m 以及相同的内容。好的 currentUser 但我怎样才能得到这个 currentUser ?我的意思是我怎么能说这个会话与具有用户名@“toto”的用户相关联?
【解决方案2】:

我终于成功了!!!! 可能有更好的解决方案,但这个可行,我希望它对未来的其他人有所帮助

在用户创建新会话的 .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
}

//我全部保存

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2021-06-10
    • 2013-06-05
    相关资源
    最近更新 更多