我如何为我的应用程序的每个用户创建 NSUserDefaults?

How i can make NSUserDefaults for each user of my app?

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

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

注销用户 1 并登录用户 2 后:

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

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

更新: 最后我解决了这个问题:

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


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

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

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

你必须有一些方法来唯一标识用户,然后在设置/获取 lastTime

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

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

(对于 Mac 应用程序或您为多用户 iOS 应用程序提出的任何方案,用户名将设置为 NSUserName())

确保在设置值后,用户将同步用户默认值。 喜欢

[[NSUserDefaults standartUserDefaults] 同步];

就我个人而言,我会使用 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