到目前为止,我有一个非常简单的应用程序基础,两个文本字段,用户输入一个人的名字和姓氏,然后当他们点击保存按钮时,运行以下代码:
person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
NSError *err;
if (![managedObjectContext save:&err])
{
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", err, [err userInfo]);
exit(-1); // Fail
}
所以我有一个Person
对象,我将用户输入的名字和姓氏设置到文本字段中,然后在选择保存时插入对象。但是,保存后,名字和姓氏显示为(null)
。我正确地连接了所有的插座和方法,所有代码都被运行以设置并保存名称/对象。
但是,如果我在主视图中执行此操作:
Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
PersonDetailViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"PersonDetail"];
vc.managedObjectContext = fetchedResultsController.managedObjectContext;
vc.person = p;
然后保存我的对象,值不是(null)
。我试图在决定保存之后插入新对象,而不是创建它然后删除它,如果取消具有更清晰和更逻辑的代码。
答案 0 :(得分:0)
原来我的Person
对象正在返回nil。
解决方案:
使用nil上下文初始化Person
对象,以便不插入但不是nil。这样我可以确保其变量存储诸如名字和姓氏之类的东西,然后插入如下所示。
person = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext] insertIntoManagedObjectContext:nil];
Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
p.firstName = person.firstName;
p.lastName = person.lastName;
这帮助我实现了这个目标: Is there a way to instantiate a NSManagedObject without inserting it?