1

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

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). 我在决定保存后尝试插入新对象,而不是创建它然后在取消时删除它以获得更清晰和更合乎逻辑的代码。

4

1 回答 1

0

原来我的Person对象返回零。

解决方案:用 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;

这帮助我达到了这一点: 有没有办法在不插入的情况下实例化 NSManagedObject?

于 2012-11-14T19:58:05.047 回答