xcode 如何为应用程序的每个用户设置NSUserDefaults?

bkhjykvo  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(155)

我需要在我的应用程序中访问UserDefaults。但我需要保存在应用程序中注册的每个用户的设置。例如:

[[NSUserDefaults standartUserDefaults] setObject:@"15:00" forKey:@"lastTime"]// for current user1

以及在注销user 1和登录user 2之后:

[[NSUserDefaults standartUserDefaults] setObject:@"11:00" forKey:@"lastTime"]// for current user2

而且,如果我尝试读取key @“lastTime”,那么我会得到最后一个值,但不是这个用户的。我可以将userDefaults存储在不同的文件中,作为一个变体?或者其他解决方案?
最后我解决了这个问题:

#define UserDefaults  [NSUserDefaults standardUserDefaults]
#define uKey(key)  [NSString stringWithFormat:@"%@_%@",key,User.user_name]

[UserDefaults setInteger:lastData forKey:uKey(@"lastResultDataId")];
qjp7pelc

qjp7pelc1#

iOS上没有用户的概念每一台设备,iPhone或iPad,都被假定有且只有一个用户。显然,这通常不是真的,尤其是在iPad上。所以有些应用程序会为不同的人创建使用设备的方案。如果你已经这样做了--但不清楚你是否已经这样做了--那么你就知道用户名了。如果你正在编写Mac应用程序,那么就使用NSUserName()以获取登录用户的名称。之后,只需将用户名连接到NSUserDefaults中的密钥上,如下所示:

NSString *username = @"john";
[[NSUserDefaults standardUserDefaults] setObject:@"15:00" forKey:[NSString stringWithFormat:@"last_login_username_%@", username]];

(对于Mac应用程序,用户名将设置为NSUserName();对于多用户iOS应用程序,用户名将设置为您已经想到的任何方案)

jyztefdp

jyztefdp2#

如果您有某种用户标识符,请为不同的用户使用字典:

NSDictionary *user = @{@"lastTime": @"15:00" };
[[NSUserDefaults standartUserDefaults] setObject:user forKey:@"userId"];
vnzz0bqm

vnzz0bqm3#

您必须有某种方法来唯一标识用户,然后在设置/获取lastTime值时在键中使用任何内容- UUID、用户名、电子邮件、用户ID

mfpqipee

mfpqipee4#

就我个人而言,我会使用一个NSDictionary,每个用户都有一个字典,并将其存储到NSUserDefaults中的一个关键字下,该关键字是由他们的用户名构造的,如下所示。

NSMutableDictionary *userDict = [[NSMutableDictionary alloc] init];
NSString *username = "myUsername";
NSDate *currentDateTime = [NSDate date];

[userDict setObject:username forKey:@"username"];
[userDict setObject:currentDateTime forKey:@"lastAccessed"];

/* Any other user date you want to store about this user
 * Note we are going to use NSUserDefaults which is not
 * secure so do not store sensitive data in here
 */

 NSString *userDictKey = [NSString stringWithFormat:@"uk.co.yourAppName.%@", username];
 [[NSUserDefaults standardUserDefaults] setObject:userDict forKey:userDictKey];
 [[NSUserDefaults standartUserDefaults] synchronize];

要检索这些数据,您需要做的就是知道用户的用户名是什么,然后执行以下操作

NSString *userDictKey = [NSString stringWithFormat:@"uk.co.yourAppName.%@", username];
NSDictionary *userRetrievedDict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:userDictKey];

但是,如果要对此数据进行任何修改,则需要对其进行调整,以便将数据移动到NSMutableDictionary中,这样您就可以对其进行更新,然后将其存储回NSUserDefaults

tpxzln5u

tpxzln5u5#

确保设置值后,用户将同步用户默认值。如
[[NSUserDefaults标准用户默认值]同步];

相关问题