通过从文档复制.sqlite文件来预填充核心数据

时间:2012-07-20 18:14:23

标签: iphone ios core-data

我已经读过这个有效,但我无法理解。我想预先填充核心数据。我运行了我的项目,因此它将创建sqlite文件。我将其复制到我的桌面,然后使用命令行sqlite3预填充它。我运行查询以确保它已正确填充。所以现在我重新添加到我的项目中。不管我做什么,它都不会获取数据。

我得到了它的工作ONCE。在模拟器中运行后,我从项目的文档文件夹中重新复制了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个对象的计数。我让它在上面提到的一次返回所有数据。

1 个答案:

答案 0 :(得分:1)

根据Core Data Programming Guide

  

重要虽然Core Data支持SQLite作为商店类型,但商店格式(与其他本机Core Data商店类似)是私有的。您无法使用本机SQLite API创建SQLite数据库并直接将其与Core Data一起使用(您也不应使用本机SQLite API操作现有的Core Data SQLite存储)。如果您有现有的SQLite数据库,则需要将其导入Core Data存储(请参阅“有效导入数据”)。

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

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