2

我读过这行得通,但我做不到。我想预填充核心数据。我运行了我的项目,以便创建 sqlite 文件。我将它复制到我的桌面,然后使用命令行 sqlite3 预填充它。我运行查询以确保它被正确填充。所以现在我将它重新添加到我的项目中。但是,无论我做什么,它都不会获取数据。

我让它工作一次。在模拟器中运行它后,我从项目的文件夹中重新复制了 sqlite 文件。然后我填充了这个新的 sqlite 文件。我把它放回我的项目中,我得到了要显示的内容。

我认为问题在于 Z_METADATA 表。此表具有 Z_UUID 属性。我认为它唯一有效的时候是模拟器的 UUID 和 sqlite 的 Z_UUID 属性相同。

我进入 ~/Library/Developer/Xcode/DerivedData 并删除了 DerivedData 文件夹的内容。所以现在我的模拟器在我运行它时会有一个不同的 UUID。我这样做了,现在 sqlite 文件的内容将不会显示。这就是为什么我认为 Z_METADATA 表是问题所在。Z_METADATA 的 UUID 和我的模拟器的 UUID 不一样所以由于某种原因它不能使用它?

我发现的所有关于以这种方式预填充核心数据的文章都是旧的,大约在 2009 年,所以我认为这不是问题。那么我可以使用这种复制sqlite文件的方法,使用命令行预先填充它,然后将它重新添加到项目中吗?有没有人有当前的方法来预填充核心数据?

所以错误是我NSFetchedResultsController正在返回 0 个对象的计数。我得到它来返回我上面提到的一次所有数据。

4

1 回答 1

1

根据核心数据编程指南

重要虽然 Core Data 支持 SQLite 作为存储类型,但存储格式——就像其他原生 Core Data 存储一样——是私有的。您不能使用原生 SQLite API 创建 SQLite 数据库并将其直接与 Core Data 一起使用(也不应该使用原生 SQLite API 操作现有的 Core Data SQLite 存储)。如果您有现有的 SQLite 数据库,则需要将其导入核心数据存储(请参阅“高效导入数据”)。

虽然我确信有人对 Core Data sqlite 格式进行了逆向工程,但 Apple 不提供任何文档,而且它很可能会在主要操作系统版本中发生变化。

编写一个使用 Core Data 进行导入的命令行应用程序。

于 2012-07-21T01:49:40.530 回答