【问题标题】:CoreData NSManagedObject Not SavingCoreData NSManagedObject 不保存
【发布时间】:2012-11-14 17:30:47
【问题描述】:

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

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

【问题讨论】:

  • 这两种情况下的 managedObjectContext 是一样的吗?还是第一种情况使用单独的或子 MOC?
  • 第一种情况使用相同的 MOC。就像在第二种情况下一样,它从主视图控制器传递下来。唯一的区别是我在 MOC 被传递之前或之后插入对象。
  • 这只是一个想法,因为它让我想起了这个问题:stackoverflow.com/questions/12875749/… 在 MOC 发布后属性变为 nil。
  • 有趣的事情要注意。在详细视图中插入对象很好,MOC 也很好。但是,只要在插入后在对象上设置了任何属性,例如名字和姓氏。因此在 viewDidLoad 期间插入对象有效,但在离开视图时插入对象不起作用,留下值 (null)。大家还有什么想法吗?
  • 额外信息:我的Person 对象在插入之前为零。这意味着我设置的任何名字或姓氏属性实际上都不会被存储。然后,在插入之后,Person 对象被设为 nil,因为它将它视为一个新对象。那么如何在插入之前将我的属性存储在Person 对象中?

标签: iphone objective-c core-data nsmanagedobject


【解决方案1】:

原来我的 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?

【讨论】:

    猜你喜欢
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多