【问题标题】:How to Force Core Data to Create Sqlite Database from Model *Before* Any Data Is Persisted in Application?如何强制核心数据从模型中创建 Sqlite 数据库*之前*任何数据都保留在应用程序中?
【发布时间】:2011-10-23 10:10:42
【问题描述】:

在您实际创建任何需要持久化的实体之前,有没有办法强制 Core Data 根据您的模型创建底层 SQLite 数据库?

我的目标是在设计器中定义我的模型,创建 SQLite 数据库,从而能够将数据导入其中和/或通过 SQLite 数据库浏览器等工具直接插入/更新数据。

【问题讨论】:

  • 您可以创建一个虚拟记录,然后将其删除。
  • 可能是个愚蠢的问题,它不会在您加载应用程序后创建空数据库,甚至在构建项目后创建吗?
  • @Karoly:我没有注意到。我是 Core Data 的新手,所以我肯定是错的
  • 直接编辑 Core Data SQLite 存储总是有风险的,而且通常麻烦多于其价值。 SQLite 模式没有记录,它会随着时间的推移而变化,恕不另行通知。最好只通过 Core Data 导入数据并完成。

标签: objective-c ios core-data


【解决方案1】:

一旦你的managedObjectContextpersistentStore 准备好了,就去做

[managedObjectContext save:&error];

没有将任何内容放入上下文中。这会将不包含CoreData实体的数据库文件写入文件系统。

但是,您不能在不使用 CoreData 的情况下将实体添加到支持您的 CoreData 模型的 SQLite 数据库中。 CoreData 将对象层次结构转换为 SQLite 的方式是一个实现细节,如果不使用 CoreData 本身,创建一个可由 CoreData 正确且一致地解释的 SQLite 文件是非常困难的。

如果您想将 SQLite 文件视为 SQlite 文件,请直接使用 SQLite,或使用像 FMDB 这样的瘦包装器。

【讨论】:

  • 我会试试你的解决方案。作为一个附带问题,在您看来,当您拥有像 FMDB 这样的 SQLite 包装器来减轻直接使用数据库的痛苦时,Core Data 真的值得吗?也许只有我一个人,但我喜欢干净的数据库……我可以直接理解和使用它,也可以有效地将数据移入或移出。想法?
  • @wgpubs -- Core Data 不是 SQL 包装器。它是一个对象图管理器,旨在创建模型-视图-控制器设计应用程序的模型层。因此,持久性是可选的,并且是经过深思熟虑的设计。 Core Data 通过为您处理数据对象的所有运行时管理来节省时间,因此您不必为每个应用程序重写对象管理。有效地在磁盘上和磁盘上获取原始数据只是次要的可选功能。
  • @wgpubs -- 您可能想查看我之前关于何时使用 Core Data 与 SQL 或其他方法的答案之一:stackoverflow.com/questions/5237943/…
猜你喜欢
  • 2014-04-16
  • 2011-01-22
  • 1970-01-01
  • 2016-07-11
  • 2014-03-31
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多