我有两个实体: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