我的iPhone应用程序当前使用Core Data来保存用户创建的增长条目。我正在尝试将.sqlite文件添加到存储平均增长数据的应用程序中,以便我可以使用Core Plot向用户显示他们的增长与平均值的比较。
注意:平均数据不需要是可写的。
经过大量搜索Stack Overflow和无数谷歌后,我得出结论,我想要做的是实现两个PersistentStoreCoordinator:一个用于用户输入的数据(readwrite),一个用于平均数据(readonly)。这是最好的课程吗?
如果是这样,我不知道从哪里开始。目前,我的Core Data Stack方法在我的AppDelegate.m中(Xcode放置它们)。如果我要给他们增加很多东西,我觉得我应该把它们搬到更好的地方,但我不知道那个更好的地方可能会在哪里。除此之外,我不知道应该从哪里开始尝试添加新的持久存储。
感谢您的帮助!
编辑以澄清: 如果我建议创建两个PersistentStores是正确的路线,我该怎么做?如果它不是最好的路线,我该怎么办?
答案 0 :(得分:1)
以下是一些初学者:
如果您计划在不同商店中使用不同的实体组合,则需要向MOM添加“配置”。参见核心数据编程指南>信息的托管对象模型。
保留实际数据库的正常位置位于“应用程序支持目录”中,该目录位于用户>图书馆>应用程序支持> NameOfYourApp。表示此路径的字符串是自动生成的applicationSupportDirectory
方法返回的内容。 (哎呀,你问的是iOS。在那里,applicationDocumentsDirectory
方法返回沙箱的路径。)
自动生成的persistentStoreCoordinator
访问者是添加商店的地方。您可以创建它的不同版本以添加不同的商店,或者您可以向应用程序委托添加属性,用于跟踪要使用的商店。例如,您可以执行以下操作,而不是将URL指向默认的“storedata”文件:
NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @“nameOfStoreToAdd.sqlite”]];
在addPersistentStoreWithType
来电中,您需要使用NSSQLiteStoreType
,而不是默认NSXMLStoreType
。 (如果你得到一个NSUnderlyingException =“路径中的文件似乎不是SQLite数据库。”,这就是问题。)如果你为MOM设置了不同的配置,你会想要添加一个字符串识别此商店的configuration
。稍后,您可以了解如何为options
参数设置选项字典。
自动生成的managedObjectContext
是调用persistentStoreCoordinator访问器的内容。所以,再次,你需要不同版本的这个或一些属性来咨询如何调用storeCoordinator访问者。
如果要切换数据库,首先要保存当前上下文,将其设置为storeCoordinator为nil,然后以检索其他商店的方式调用上下文访问器。 (或者你可以在同一时间保持多个上下文打开。只需确保设置单独的属性来保存它们及其storeCoordinators。)
只需拨打[[NSApplication sharedApplication] delegate]
,您就可以从应用的任何部分访问应用代理,因此将此代码留在那里是有意义的。如果它太长,你总是可以把它分解成一个类别。
我不是专家,所以其中一些可能有些不稳定,但一旦你开始,你可能会更好地了解在哪里寻找更详细的帮助。
答案 1 :(得分:1)
我已经解决了我的问题。这是我做的:
注意:在生成数据之前,您无需创建数据库。这将在您创建新实体时自动完成。
我唯一的缺点是我没有找到防止覆盖“第二”数据库中数据的方法。但我仍在寻找解决方案。
答案 2 :(得分:0)
您需要设置Persistent Store Coordinator以使用多个持久存储。看一下为对象模型定义Configurations以控制哪些模型对象存储在哪个持久性存储中。