2012-03-10 58 views
0

下面是我的代码片段:分配值在核心数据对象

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]; 

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

+0

可以格式化你的代码。 – iamsult 2012-03-10 07:44:26

+0

@iamsult我应该做什么格式? – user1253637 2012-03-10 08:03:32

+0

您确定要将密码保存到数据库吗? – Sulthan 2012-03-10 08:19:13

回答

3

你正在创建的信息(新DB行)新的管理对象:

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

然后将其分配给用户。

login.information = information; 

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

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

那么你的代码将是:

[login.informations addObject:information]; 

information.login = login; 
+0

非常感谢..它的工作:) – user1253637 2012-03-10 21:15:17

+0

在这种情况下,请接受答案。 – Sulthan 2012-03-10 22:00:04