如何在 sqlite 核心数据文件之间正确切换?
Posted
技术标签:
【中文标题】如何在 sqlite 核心数据文件之间正确切换?【英文标题】:How to properly switch between sqlite core data files? 【发布时间】:2014-11-14 16:28:34 【问题描述】:所以我目前在 coredata 文件之间切换时遇到了一些麻烦。场景如下:
1) 有两个用户被授权使用我的应用程序,每个用户都有自己的sqlite文件来表示自己的数据,因为需要分离关注点 2) 当用户 A 注销和用户 B 登录时......核心数据应切换到用户 B 的 sqlite 文件并仅存在于该文件中。
如果我删除用户 A 的 PSC 并为用户 B 创建一个新的,我是在安全区还是我错过了更多步骤?我注意到来自用户 A 的一些数据最终出现在用户 B 的核心数据中。
【问题讨论】:
【参考方案1】:如果您要在持久性存储文件之间切换,并且无法将一个数据连接到另一个数据,则需要拆除整个 Core Data 堆栈,然后重新创建它。这意味着:
全部NSPersistentStoreCoordinator
s
全部NSManagedObjectContext
s
您从 Core Data 加载的所有托管对象,位于应用程序的任何位置
这些中的每一个都需要替换为一个新实例,就像您在应用首次启动时所做的那样。因此,有时最好同时拆除整个 UI,从初始视图控制器重新加载所有内容。
如果您已将数据从托管对象复制到其他位置(其他属性或 UI 元素),您也需要确保将其删除。
NSManagedObjectModel
可以保留,因为它从不保存来自持久存储的任何数据。
【讨论】:
非常感谢您的解释。 我重新检查了我的代码,并确认在删除 PSC 后,我将 psc 变量设置为 nil,并且还将 managedObjectContext 设置为 nil。将其拆除就足够了,还是您建议我释放内存位置? 如果您使用 ARC,“dealloc”没有意义。您还需要绝对确保删除应用程序中的每个托管对象。 您是否建议我在每个实体类型的上下文中使用 deleteObject:?如果用户 B 在使用应用程序期间触发 save: 功能,这将如何影响用户 A? 不,我不建议您删除数据。我是说你必须确保内存中没有托管对象。以上是关于如何在 sqlite 核心数据文件之间正确切换?的主要内容,如果未能解决你的问题,请参考以下文章