【问题标题】:Can I make instances of an NSManagedObject in no particular NSManagedObjectContext?我可以在没有特定的 NSManagedObjectContext 中创建 NSManagedObject 的实例吗?
【发布时间】:2011-11-06 20:06:21
【问题描述】:

我正在构建一个应用程序,它从 Web API 接收许多列表,并允许用户保存一些列表以供离线查看。我通常的做法是:

  1. 从 API 中获取数据,并为每个数据创建一个新的列表对象
  2. 如果用户选择将对象保存到数据库中。

但这是一个 Core Data 应用程序,所以上下文是保存的内容,而不是对象。在这种情况下,上面会变成这样:

  1. 从 API 获取数据,并为每个数据创建一个非托管列表对象
  2. 如果用户选择将对象移动到托管上下文中,然后保存上下文

拥有非托管和托管版本的列表对象的一种方法是拥有两个类,例如ManagedListing 和 UnmanagedListing - 但这是一种非常重复的做法。

我想要让Listing成为NSManagedObject的子类;在没有 NSManagedObjectContext 的情况下初始化它们;然后当我想保存一个时,我要么设置它的上下文,要么将它的属性复制到上下文中的一个新列表中。

我可以在没有特定的 NSManagedObjectContext 中创建 NSManagedObject 的实例吗?如果有,怎么做?

【问题讨论】:

  • 你为什么不把它们全部放在一个上下文中,然后如果你不需要它们就删除它们。或者,您可以将它们全部设为单独的对象,然后通过将每个对象的信息传输到 ManagedObject obj 来保存它们。
  • 如果创建和删除是瞬态对象的模式,有没有办法取消删除它们?我不喜欢两个类的解决方案,因为它会增加维护它们之间关系的工作。
  • 你有 [context deleteObject:][context insertObject:] 可以让你在你的对象是否“插入”到托管对象上下文之间进行更改。当你想保存当前布局时,只需调用[context save:]
  • 我可以在拨打[context deleteObject:]之后拨打[context insertObject:]

标签: iphone core-data


【解决方案1】:

在 iOS 是。 在 iOS >= 5.0 -

【讨论】:

  • 你能说得更详细些吗?
  • 如果你只使用 alloc+init NSManagedObject: 在 iOS 中,版本低于 5.0 的编译器会给出警告。在 iOS 版本高于或等于 5.0 的编译器会报错。
【解决方案2】:

使用两个持久存储,一个在内存中,一个在磁盘上。如果用户想要保存,请使用assignObject:toPersistentStore: 将对象移动到其他商店。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2012-10-22
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2020-04-29
    相关资源
    最近更新 更多