我想在Android和iOS应用之间共享数据。我从这个目录导出了核心数据sqlite, 〜/ Library / Application Support / iPhone Simulator / User / Applications // Documents / .sqlite
我觉得哪个好。当我尝试使用sqlite浏览器打开sqlite文件时出现问题。因为它给出了一个错误,“不是一个sqlite 3文件”。我以为我会把那个coredata sqlite文件导入android。
但我的问题是,将iOS coredata导入android sqlite的正确方法是什么?
答案 0 :(得分:3)
使用Core Data创建的SQLite文件并在其他任何地方使用它都没有什么好办法。核心数据不仅仅是一个SQLite的包装多,它提供了不同的规则和假设(例如,核心数据有真正的许多一对多的关系,所以你不需要创建连接表)一个相当不同的API。 SQLite是一个实现细节。因此,其中一个SQLite文件中的模式只与Core Data对象模型有相似之处。你可以在任何地方打开SQLite文件,但理解它可能是个问题。
如果您想使用相同的数据并且您已经在使用Core Data,则需要让您的应用将数据导出为更便携的内容 - 可能是CSV,或者更通用的SQLite文件,或其他任何内容对你来说很好看。
如果您还没有使用Core Data并且需要这种可移植性,那么最好直接使用SQLite来处理您需要的任何模式。如果不是您需要的话,您不必通过Core Data在iOS上使用SQLite。您可以直接使用SQLite的API,也可以使用PLDatabase或FMDB之类的包装。
答案 1 :(得分:1)
Core Data的SQLite商店是一个vanilla SQLite文件,因此您的导入会出现其他问题。但是,Core Data从其实体到SQLite存储的映射是显式依赖于实现的,因此,它不是规范的一部分,因此没有记录。由于允许在Core Data版本之间进行更改,因此对其进行反向工程也不一定安全*。
从iOS 5开始,如果您真的想使用Core Data和SQLite,那么您可以自己编写NSIncrementalStore。这将允许您将所需的Core Data数据映射到SQLite。缺点是它几乎没有记录。
(*)虽然有时候在那里逛逛是有帮助的;你可以提供命令行参数-com.apple.CoreData.SQLDebug 1让Core Data将它执行的所有SQL命令转储到控制台,然后它可以是一个有用的性能诊断,在SQLite中打开你的持久存储并检查查询计划,以确保您索引正确的东西。
答案 2 :(得分:0)
没有导出任何iOS SQLite文件所以我不知道你如何导出你的。 也许您需要分析您的文件字节代码?看这个http://www.sqlite.org/fileformat.html