核心数据 - 2个对象模型,1个或2个托管对象上下文 - 哪个更好?

时间:2013-01-25 14:08:15

标签: ios core-data nsmanagedobjectcontext

我正在开发一款小型iPhone日志应用程序,我希望将位置数据数据库与用户记录的数据分开。

我有几个理由将两者分开,包括

1)我可能会通过应用更新推送定期位置数据更新,我不想冒险制作并影响用户数据。

2)位置数据可能会使用户数据相形见绌,因此如果两者是分开的,则同步和备份用户文件的速度会更快。

所以考虑到我打算有两个持久存储在性能和编码复杂性方面有优势或缺点,在两个独立的上下文中有一个带有两个持久存储的上下文,每个上下文都有自己的持久存储?

任何对此的想法都会非常感激 - 当谈到这个问题时,我有点像n00b - 提前谢谢

西蒙 。

2 个答案:

答案 0 :(得分:1)

我在我的应用程序中实现了类似的功能,我从2个数据库加载数据,因为我想将更新推送到某组数据。

我这样做的方法是使用1个对象模型,1个托管对象上下文但有2个持久性存储,每个存储加载不同的sqlite文件。为此,我在数据模型文件中创建了2个配置,然后将相应的实体拖到每个配置中。然后,当您创建持久性存储时,请执行以下操作:

[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"Configuration1" URL:store1URL options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil] error:&error];
[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"Configuration2" URL:store2URL options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil] error:&error];

到目前为止,我发现的唯一问题是你不能在商店之间建立关系。 This answer显示了如何使用fetched属性来复制关系。

希望这有帮助。

答案 1 :(得分:0)

我实际上能够使用两个不同的managedObjectContexts和两个不同的持久存储使用相同的应用程序。

只需将它们加载到应用程序代理上,它们就可以在整个应用程序中使用。

我所做的是,我只是为第一个上下文复制并粘贴完全相同的初始化默认代码,并将其重命名为新的上下文,存储和模型。

为什么我这样做?我手上有一个完全独立的应用程序模块,我对它没有多少控制权,我不想弄乱我的应用程序的逻辑,并能够将它保存在代码库的单独fork中,为主要分支做差异化提交和樱桃采摘增强功能。