我们可以使用两个sqlite数据库与Core Data的相同表的联合吗?

时间:2010-05-25 13:13:42

标签: iphone sqlite core-data

我有一个带有预先填充的sqlite“基线”数据库的iPhone Core Data应用程序。我可以添加第二个较小的sqlite数据库,其中包含与我预先填充的“基线”数据库相同的表,但使用其他/补充数据,以便Core Data可以愉快地将两个数据库中的数据联合起来,并最终呈现给我,就像它是所有单一数据源?

我的想法是:

1)“基线”数据库永远不会改变。

2)我可以在需要时下载较小的“补充”sqlite数据库以获取更多数据(我假设允许下载sqlite数据库,否则请发表评论)。

然后,3)核心数据能够将来自1&的数据联合起来。 2.然后,我可以通过调用我定义的核心数据管理对象模型来引用此统一数据。

希望这是有道理的。

提前致谢。

2 个答案:

答案 0 :(得分:3)

核心数据旨在通过– addPersistentStoreWithType:configuration:URL:options:error:方法处理多个数据文件。这将允许您将所有数据文件组合在一起,然后通过单个NSManagedObjectContext访问它们。

您唯一的问题,甚至可能不是您的问题,是商店文件无法直接相互引用。因此,您需要通过唯一标识符“手动”引用文件之间的数据。但是我怀疑你已经意识到了这个限制。

手动关系

这个想法是,当“关系”中的两个对象都在一个模型和一个文件中时,Core Data会发挥其魔力并为您处理所有参照完整性。但是,当它们处于不同的文件和/或模型中时,这不再自动发生。

此问题的解决方案是使用fetched属性查找某个唯一标识符,以检索您希望位于关系另一侧的实体(或多个实体)。这将使文件之间的关系“弱”。

有一点需要注意,但这样做。当某些内容发生变化时,fetched属性不会自动更新。这意味着当数据更改会导致该关系发生变化时,您的应用程序将不会自动意识到它,您将需要再次请求该属性以获取更新的关系信息。

希望这会让它更清晰。

获取属性和关系的共存

他们绝对可以共存,但意识到他们是两个独立的属性。如果您希望控制器代码将它们视为一个,那么我建议为该实体构建一个子类,然后在其中添加一个方法,该方法同时触及关系和fetched属性,然后将它们汇总为一个{{1} }或NSArray,然后将其返回到您的控制器代码。

答案 1 :(得分:0)

您可以使用ATTACH DATABASE语句附加下载的数据库,并使用表格的联合。