我有一个iPhone核心数据应用程序与一个预先填充的sqlite“基线”数据库。我是否可以添加另一个较小的sqlite数据库,该数据库具有与我预先填充的“基线”数据库相同的表,但具有额外的/互补的数据,以便Core data可以很好地合并来自两个数据库的数据,并最终将其作为单个数据源呈现给我?
我的想法是:
1)“基线”数据库永远不会改变。
2)我可以在需要的时候下载更小的“互补”sqlite数据库,以获得额外的数据(我假设允许下载sqlite数据库,如果不允许,请评论)。
3)核心数据然后能够联合来自1和2的数据。然后,我可以通过调用我定义的核心数据管理对象模型来引用这个统一的数据。
希望这是有意义的。
提前谢谢。
发布于 2010-05-26 01:30:24
核心数据旨在通过– addPersistentStoreWithType:configuration:URL:options:error:方法处理多个数据文件。这将允许您将所有数据文件组合在一起,然后通过单个NSManagedObjectContext访问它们。
你唯一的问题,甚至对你来说都不是问题,就是存储文件不能直接相互引用。因此,您需要通过唯一标识符“手动”引用文件之间的数据。然而,我怀疑您已经意识到了这个限制。
手动关系
这个想法是,当“关系”中的两个对象都在一个模型和一个文件中时,Core Data会发挥它的魔力,并为您处理所有的引用完整性。然而,当它们位于不同的文件和/或模型中时,这不再是自动发生的。
这个问题的解决方案是使用获取的属性来查找某个唯一的标识符,以检索您希望在关系的另一端的实体。这将为您提供文件之间的“弱”关系。
不过,在执行此操作时需要注意一件事。获取的属性不会在发生更改时自动更新。这意味着,当数据更改会导致该关系发生更改时,您的应用程序将不会自动意识到这一点,您将需要再次请求该属性以获取更新的关系信息。
希望这能让它变得更清晰一些。
获取的属性和关系的共存
它们当然可以共存,但要意识到它们是两个独立的属性。如果您希望控制器代码将它们看作一个实体,那么我建议您为该实体构建一个子类,然后在其中添加一个方便的方法,该方法可以同时访问关系和获取的属性,然后将它们汇总到一个NSArray或NSSet中,然后将其返回到控制器代码中。
发布于 2010-05-25 22:57:42
您可以使用ATTACH DATABASE语句附加下载的数据库,并对表的联合进行操作。
https://stackoverflow.com/questions/2904917
复制相似问题