2

我想在我的 android 和 iOS 应用程序之间共享数据。我已经从这个目录中导出了核心数据 sqlite,~/Library/Application Support/iPhone Simulator/User/Applications//Documents/.sqlite

我认为这很好。当我尝试使用 sqlite 浏览器打开 sqlite 文件时出现问题。因为它给出了一个错误,“不是 sqlite 3 文件”。我在想我会将coredata sqlite文件导入android。

但是我的问题是,将 iOS coredata 导入 android sqlite 的正确方法是什么?

4

3 回答 3

3

没有真正好的方法来获取由 Core Data 创建的 SQLite 文件并在其他任何地方使用它。Core Data 不仅仅是一个 SQLite 包装器,它提供了具有不同规则和假设的完全不同的 API(例如,Core Data 具有真正的多对多关系,因此您不需要创建连接表)。SQLite 是一个实现细节。因此,这些 SQLite 文件之一中的模式与 Core Data 对象模型只有一点相似之处。您可以在任何地方打开 SQLite 文件,但理解它可能是个问题。

如果你想使用相同的数据并且你已经在使用 Core Data,你需要让你的应用程序将数据导出到更便携的东西——可能是 CSV,或者更通用的 SQLite 文件,或者其他看起来不错的文件给你。

如果您还没有使用 Core Data 并且需要这种可移植性,那么最好直接将 SQLite 与您需要的任何模式一起使用。如果不是您需要的,您不必通过 Core Data 在 iOS 上使用 SQLite。您可以直接使用 SQLite 的 API,也可以通过PLDatabaseFMDB等包装器使用。

于 2013-05-31T17:32:50.890 回答
1

Core Data 的 SQLite 存储是一个普通的 SQLite 文件,因此您的导入会出现其他问题。然而,Core Data 从其实体到 SQLite 存储的映射明确依赖于实现,因此,它不是规范的一部分,因此没有记录。由于允许在 Core Data 的版本之间进行更改,因此对其进行逆向工程也不一定安全*。

从 iOS 5 开始,如果您真的想使用 Core Data 和 SQLite,那么您可以做的就是编写自己的NSIncrementalStore。这将允许您将任何您想要的从 Core Data 映射到 SQLite。缺点是它几乎没有记录。

(*) 虽然有时在那里闲逛会有所帮助;您可以提供命令行参数 -com.apple.CoreData.SQLDebug 1 让 Core Data 将它执行的所有 SQL 命令转储到控制台,然后在 SQLite 中打开持久存储并签出可能是一个有用的性能诊断查询计划,以确保您正在索引正确的内容。

于 2013-05-31T19:21:34.260 回答
0

没有导出任何 iOS SQLite 文件,所以我不知道你如何导出你的。也许您需要分析您的文件字节代码?看看这个http://www.sqlite.org/fileformat.html

于 2013-05-29T09:32:40.540 回答