【问题标题】:Can I create a Core Data object without saving it?我可以在不保存的情况下创建 Core Data 对象吗?
【发布时间】:2021-11-21 16:24:39
【问题描述】:

我正在制作一个应用程序,您可以在其中拥有多个期刊并为每个期刊设置不同的设置。我将Journal 和JournalSettings 数据存储在Core Data 中。现在我想允许用户编辑默认日志设置,以便新的Journals 具有默认日志设置所描述的JournalSettings。我使用 UserDefaults 来存储默认日志设置,因为它似乎是存储默认值的合适位置。我已经有一个 JournalSettingsView 来显示一个 JournalSettings 对象,我想重用这个视图来显示和编辑默认日记设置。所以我想从存储在 UserDefaults 中的默认日志设置数据创建一个 JournalSettings 实例,但我不想将这个新的 JournalSettings 实例保存到 Core Data,因为它只是已经存储在 UserDefaults 中的数据的副本.

我可以在不永远将其保存到 Core Data 的情况下创建一个 Core Data 对象实例吗?我以为我可以使用内存中的子 NSManagedObjectContext,我将创建与默认日记设置相对应的 JournalSettings,但据我了解,该子上下文将保存到其父上下文(我的主要核心数据上下文)。我还尝试在内存中创建一个单独的(不是子项)NSManagedObjectContext 来存储默认的JournalSettings,但随后我的应用程序因错误而崩溃:

Multiple NSEntityDescriptions claim the NSManagedObject subclass 'JournalSettings' so +entity is unable to disambiguate.

如果我无法在不保存的情况下创建 Core Data 对象,我仍然可以通过几种方法实现默认日志设置,但我不确定哪种方法是最佳做法:

  1. 将默认期刊设置移至 Core Data。这会很好用; UserDefaults 似乎是一个更适合存储默认值的地方。
  2. 创建一个新视图来显示/编辑默认日志设置,而不是重复使用JournalSettingsView。这也可以,但是管理两个旨在显示同一事物的视图会有点烦人。视图之间唯一真正的区别是,一个以JournalSettings 实例的形式获取其输入,而另一个将单独提供JournalSettings 属性(如字体大小、期刊名称等)。

【问题讨论】:

  • 我完全不明白您为什么需要 Core Data 来进行 JournalSettings,在我看来这是一个过于复杂的解决方案。

标签: ios swift core-data


【解决方案1】:

子上下文是您正在寻找的解决方案。

来自文档:

如果上下文的父存储是另一个托管对象上下文,则获取和保存操作由父上下文而不是协调器进行调解。该模式有多种使用场景,包括:

  • 管理可丢弃的编辑,例如在检查器窗口或视图中。

您是对的,当您保存子上下文时,数据更改将传播到父上下文。
在您的情况下,您根本不需要保存子上下文。

与您的其他想法有关:

  1. 哪种存储最适合:UserDefault 或 CoreData。这取决于JournalSettings 代表的设置类型。如果是与数据相关的设置(如参考数据对象等),我会将其存储在 CD 中。但是,如果是数据独立的常规设置,则比 UD 更好。并且不要忘记UD不能被系统清除/丢失。因此,您永远不应该在其中存储敏感/重要数据。
  2. 也许您不需要创建新视图。相反,您可以在另一个实体中提取与数据相关的操作(MVC 中的控制器,MVVM 中的 ViewModel ......)。在这种情况下,您将拥有独立于存储类型的单一视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多