更改 App 当前的 CoreData 源

Posted

技术标签:

【中文标题】更改 App 当前的 CoreData 源【英文标题】:Change App's current CoreData source 【发布时间】:2016-09-23 08:55:17 【问题描述】:

对于我的应用程序,我使用 CoreData 来存储用户信息,并且可能有多个用户帐户。所以我需要在不同的文件夹中创建多个 CoreData 文件。

用户退出,应用返回登录页面。当他们使用不同的帐户登录时,我需要创建另一个 CoreData 源并将应用的当前 CoreData 源更改为新的 CoreData 源。

我已经检查了这些但无法理解概念:

Refresh NSPersistentStore Refferring NSPersistentStore

我应该遵循什么逻辑来实现这一点。

谢谢

【问题讨论】:

为什么要创建另一个 CoreData 源?您的应用程序有什么特定要求吗?否则我们可以通过关系管理单个CoreData 源中的多个用户。 感谢您的回复。我需要创建另一个,因为来自服务器的不同帐户可能存在具有相同 ID 的对象。它会导致覆盖相同的对象,并且我的获取请求是基于 id 的。它也会破坏我的获取逻辑。 但是服务器也不可能有不同的用户具有相同的 id 我不认为所以请与服务器人员验证一次可能是它的服务错误? 其实我的应用是邮件客户端。考虑到我连接到hotmail并获取用户“a”的收件箱,然后用户“a”注销并以用户“b”的身份登录。电子邮件 ID 从 0 开始并上升(基于电子邮件计数)。所以在不同的用户邮箱中肯定会有相同的uid。 【参考方案1】:

只需将核心数据存储名称基于您的用户登录名并照常进行。

因此,当用户注销时,请确保您摆脱任何 NSManagedObjectContext、NSPersistentStoreCoordinator 和 NSPersistentStore。然后像这样从新的商店 URL 开始为新用户重新初始化它们。

NSURL *store = [[self documentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@_account.sqlite", userName]];

【讨论】:

以上是关于更改 App 当前的 CoreData 源的主要内容,如果未能解决你的问题,请参考以下文章

Coredata 手动迁移

在后台使用 Core Data 加密

执行 Core Data 迁移时,如何从不同实体的源存储中继承旧值?

Core Data 更改时更新 Swiftui 视图

如何通过删除和重新安装 App 将数据持久化在 Core Data 中

CoreData:打开独立的 .xcdatamodeld 文件并更改当前模型版本