【问题标题】:iOS 8 – Creating temporary NSManagedObjectsiOS 8 – 创建临时 NSManagedObjects
【发布时间】:2014-10-13 23:15:48
【问题描述】:

在 iOS 7(及更早版本)中,可以使用 选项 有效地创建“临时”NSManagedObjects,以便稍后将其添加到上下文并持久化,如下所示:

NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext];
User* user = [[User alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil];

注意nil NSManagedObjectContext 参数。 (查看 Marcus S. Zarra 对此方法的回答 here

然而,iOS 8 已经改变了关系的管理方式,如果你创建一个临时对象并在设置它的上下文之前添加一个关系,这个关系将在重新启动时被删除:

User* user = [User temporaryEntity];
[user addPhotosObject:photo];
[managedObjectContext:insertObject:user];
[managedObjectContext:&error]; 

这不会影响非关系对象,但确实无法创建具有关系的临时对象。

有谁知道如何解释这一变化并创建/使用临时工作NSManagedObjects?谢谢!

--

另外,请查看 iOS 8 论坛上的 this 相关帖子。

【问题讨论】:

  • 一个 NSManagedObject 被一个 NSManagedObjectContext 观察——这就是“管理”发生的地方。尝试在没有 NSManagedObjectContext 的情况下创建 NSManagedObject 将导致未定义的行为。从您的问题中不清楚您为什么要这样做,特别是因为所有 NSManagedObjects 在保存之前都是临时的。

标签: ios objective-c cocoa-touch core-data ios8


【解决方案1】:

在临时上下文中创建您的临时对象,并将您的关系获取到该临时上下文中

将 MOC 用作“便签本”并保存或不保存最后的上下文

这就是我一直在做的事情

【讨论】:

  • 在父子上下文中?如果我在临时上下文中创建了一个新对象,向该对象添加了关系,然后保存了该上下文,那么该对象及其关系是否都会保存到父对象中?您介意添加一个示例吗?
  • 我认为您的意思是 MOC(托管对象上下文)而不是 MOM(托管对象模型)。您绝对正确,上下文旨在用作便笺簿 - 文档对此非常清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多