我有一些代码,我通过执行以下操作生成新的CoreData实体:
SOModule* newModule = [NSEntityDescription insertNewObjectForEntityForName:@"SOModule" inManagedObjectContext:self.managedObjectContext];
newModule.name = self.tf_name.text;
newModule.ip = self.tf_ip.text;
newModule.port = self.tf_port.text;
newModule.user = self.tf_user.text;
newModule.password = self.tf_pass.text;
newModule.created = [NSDate date];
然后我调用此获取请求来检查重复的属性:
NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"SOModule"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ip == %@",newModule.ip];
NSArray* matchingModules = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
NSLog(@"%@",[matchingModules description]);
这是在我保存“保存”实体之前,但是我正在使用第一个代码块获取我刚刚输入的信息的数组描述。为了在最后保存它,我执行以下操作:
[self.managedObjectContext save:nil];
我感觉newModule
正在第一行代码中保存,但它不应该,因为它只是一个初始化器。任何清晰度都会很棒!
答案 0 :(得分:1)
insertNewObjectForEntityForName:
创建对象并将其插入到托管对象上下文中。
[self.managedObjectContext save:nil]
将上下文中的所有更改(例如新创建的对象)保存到持久性存储(SQLite文件)。
默认情况下,获取请求还包括未保存的更改,这就是它在保存上下文之前返回新对象的原因。
您可以通过设置
排除未保存的更改[request setIncludesPendingChanges:NO];
但默认值为YES
。