2013-05-29 38 views
2

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

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

但我的问题是,什么是导入的iOS coredata到的Android源码的正确方法?

+3

CoreData使用特殊的惯例将数据存储在sql文件中,因此在android应用程序中重复使用它并不简单。 –

+0

在iOS和Android中使用sqlite ..使用相同的数据模型.. – Bala

+1

核心数据SQLite文件将用SQLite浏览器打开(尽管这通常不是很有用)。你确定你正在使用SQLite数据存储,而不是像Core Data二进制存储? –

回答

3

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

如果要使用相同的数据,并且你已经在使用的核心数据,你需要让你的应用程序中的数据导出到更多的东西portable-- CSV也许,或更通用的SQLite文件,或任何否则对你来说看起来不错。

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

1

Core Data的SQLite存储是一个vanilla SQLite文件,所以导入时出现其他问题。然而,核心数据从其实体到SQLite存储的映射是与实现相关的,因此它不是规范的一部分,因此没有记录。由于它可以在不同版本的Core Data之间进行更改,因此对其进行反向工程并不一定安全。

随着iOS 5的,如果你真的想使用核心数据和SQLite那么你可以做的是写自己的NSIncrementalStore。这将允许您强制执行Core Data到SQLite的任何映射。缺点是它几乎没有记录。

(*)虽然有时候在那里徘徊有帮助;您可以提供命令行参数-com.apple.CoreData.SQLDebug 1以让Core Data将其执行的所有SQL命令转储到控制台,然后在SQLite中打开持久性存储并检出查询计划,以确保您索引正确的东西。