0

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

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

1) 我可能会通过应用程序更新推送定期位置数据更新,我不想冒险造成故障并影响用户数据。

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

因此,鉴于我打算拥有两个持久性存储,在性能和编码复杂性方面,一个上下文中有两个持久性存储,而不是 2 个独立的上下文,每个上下文都有自己的持久性存储,是否有优势或劣势?

对此的任何想法将不胜感激 - 在涉及到这些东西时我有点n00b - 在此先感谢

西蒙。

4

2 回答 2

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];

到目前为止,我发现的唯一问题是您不能在商店之间建立关系。这个答案显示了如何使用获取的属性来复制关系。

希望这可以帮助。

于 2013-01-25T14:20:14.897 回答
0

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

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

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

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

于 2013-11-21T20:55:21.350 回答