我如何为我的应用程序的每个用户创建 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
我需要在我的应用程序中访问 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