为核心数据中的对象分配值

时间:2012-03-10 07:30:54

标签: iphone ios core-data

以下是我的代码段:

NSFetchRequest *request= [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Login" inManagedObjectContext:self.managedObjectContext];
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"userid==%@ AND password==%@",useridentered, passwordentered];
[request setEntity:entity];
[request setPredicate:predicate];
NSError *anyError=Nil;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:request error:&anyError];

Login *login = [fetchedObjects objectAtIndex:0];
Information *information = [NSEntityDescription insertNewObjectForEntityForName:@"Information" inManagedObjectContext:self.managedObjectContext];
login.information = information;
login.information.title = informationTitleTextView.text;
login.information.info_1 = information1textview.text;
login.information.info_2 = information2textview.text;

[self.managedObjectContext save:nil];  // write to database
NSLog(@"login.information %@",login.information.title);
NSLog(@"login.title %@", login.userid);
   [self.delegate savebuttontapped:self];

问题是,它第一次正常工作。但是,当我再次为同一用户添加信息时,它会覆盖现有用户。如何确保将其写入下一行?

1 个答案:

答案 0 :(得分:3)

您正在为信息创建新的托管对象(新数据库行):

Information *information = [NSEntityDescription insertNewObjectForEntityForName:... inManagedObjectContext:...];

然后将其分配给用户。

login.information = information;

这不会从数据库中删除旧信息,但用户会失去与它的关系。

我想你想要的是有多个Information实例连接到一个Login实例。 这意味着您必须打开托管对象模型并将一对一关系更改为一对多关系。

然后您的代码将是:

[login.informations addObject:information];

information.login = login;