1对1关系核心数据iOS



我有两个实体:Login(用户id、密码)和Information(title、info)。现在,它们之间存在1比1的关系。我需要在数据库中添加一些用户独有的信息。

我的代码在下面:

    Login *information = [NSEntityDescription insertNewObjectForEntityForName:@"Login"
                                                      inManagedObjectContext:self.managedObjectContext];
    information.information.title = informationTitleTextView.text;
    information.information.info_1 = information1textview.text;
    information.information.info_2 = information2textview.text;
    [self.managedObjectContext save:nil];  // write to database
    [self.delegate savebuttontapped:self];

但它不起作用。我不知道,我做错了什么?如有任何帮助,我们将不胜感激。

您尚未将Information的实例添加到上下文中。试试这个:

Login *login = [NSEntityDescription insertNewObjectForEntityForName:@"Login" inManagedObjectContext:self.managedObjectContext];
Information *information = [NSEntityDescription insertNewObjectForEntityForName:@"Information" inManagedObjectContext:self.managedObjectContext];
login.information = information;
login.information.title = informationTitleTextView.text;
//...and so on...

当然,如果你要根据Login对象的属性获取它,你会想在这些属性中存储一些东西:

login.userId = theUserId;
login.password = thePassword;

在将来的某个时刻,您可能只想获取与您的条件匹配的Login对象。一旦你有了它,你就可以毫不费力地获得相关的信息对象:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Login"
    inManagedObjectContext:managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userId like %@ AND password like %@", theUserId, thePassword];
[request setPredicate:predicate];
NSError *err = nil;
NSArray *matchingLogins = [self.managedObjectContext executeFetchRequest:request error:&err];
int count = [matchingLogins count];
if (count != 1) {
    NSLog(@"Houston, we have a problem.");
}
Login *login = [matchingLogins objectAtIndex:0];
Information *info = login.information; // Notice: no separate fetch needed

最新更新