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

ios – 如何处理多用户数据库,第1张

概述我的应用程序就像很多应用程序 – 它有一个用户输入用户名和密码的登录屏幕,以及登录按钮我的应用程序还使用Core Data来保存大多数用户的业务对象,当然也是用户特定的. 我也有一个登出按钮来启用切换用户.这不会发生很多,但仍然是必要的). 现在如果不同的用户登录,我需要获取他的具体数据.但是我该如何做呢? 我不想在他登出时删除用户的数据库,即使其他用户从设备登录,我也想保存它. 我唯一可以想到的 我的应用程序就像很多应用程序 – 它有一个用户输入用户名和密码的登录屏幕,以及登录按钮我的应用程序还使用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下.

总结

以上是内存溢出为你收集整理的ios – 如何处理多用户数据库全部内容,希望文章能够帮你解决ios – 如何处理多用户数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1096009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存