ios – 如何处理多用户数据库

前端之家收集整理的这篇文章主要介绍了ios – 如何处理多用户数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序就像很多应用程序 – 它有一个用户输入用户名和密码的登录屏幕,以及登录按钮我的应用程序还使用Core Data来保存大多数用户的业务对象,当然也是用户特定的.

我也有一个登出按钮来启用切换用户.这不会发生很多,但仍然是必要的).

现在如果不同的用户登录,我需要获取他的具体数据.但是我该如何做呢?
我不想在他登出时删除用户数据库,即使其他用户从设备登录,我也想保存它.

我唯一可以想到的是通过Core Data为我保存的每个实体添加一个“ownerId”属性,并且在我获取对象时使用该属性作为谓词.
但这似乎太凌乱了.

解决方法

iOS实际上并不具有多个用户的概念,因此“登录”的范围会受到您的应用的限制.最简单的解决方案是为每个用户使用不同的文件名作为持久存储.这只是在一个地方派生(无论你设置了你的核心数据堆栈),所以实现起来相当简单.

在标准核心数据模板中,永久存储位置设置在应用程序委托的persistentStoreCoordinator方法内.正是这一行:

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coreDataTemplate.sqlite"];

这基本上意味着数据将被存储在文档目录中的一个sqlite数据库文件中,该文件将被称为coreDataTemplate.sqlite.

假设在执行此代码之前,您已使用户登录,并根据某些列表检查其用户ID,并为它们提供唯一的标识符.进一步假设标识符已被存储在用户默认值中.

将上面的行更改为:

NSString *userIdentifier = [[NSUserDefaults standardUserDefaults] stringForKey:@"loggedOnUserID"];     
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@_coreDataTemplate.sqlite",userIdentifier]];

这将为您的用户提供一个唯一的文件名.

如果您更改用户,那么您将需要保存当前的托管对象上下文,然后将应用程序代理的持久存储协调器和托管对象上下文设置为nil.当它们被重新访问时,它将在新的用户ID下.

原文链接:https://www.f2er.com/iOS/329489.html

猜你在找的iOS相关文章