CoreData NSManagedObject不保存

时间:2012-11-14 17:30:48

标签: iphone objective-c core-data nsmanagedobject

到目前为止,我有一个非常简单的应用程序基础,两个文本字段,用户输入一个人的名字和姓氏,然后当他们点击保存按钮时,运行以下代码:

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)。我试图在决定保存之后插入新对象,而不是创建它然后删除它,如果取消具有更清晰和更逻辑的代码。

1 个答案:

答案 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?