我需要在我的应用中访问UserDefaults。但是我需要为在app中注册的每个用户保存设置。 例如:
[[NSUserDefaults standartUserDefaults] setObject:@"15:00" forKey:@"lastTime"]// for current user1
并在注销user1和登录user2之后:
[[NSUserDefaults standartUserDefaults] setObject:@"11:00" forKey:@"lastTime"]// for current user2
并且,如果我尝试读取密钥@" lastTime",那么我得到最后一个值,但不是这个用户。 我可以将userDefaults存储在differentFiles中,作为一种变体?还是其他解决方案?
更新: 最后我解决了这个问题:
#define UserDefaults [NSUserDefaults standardUserDefaults]
#define uKey(key) [NSString stringWithFormat:@"%@_%@",key,User.user_name]
[UserDefaults setInteger:lastData forKey:uKey(@"lastResultDataId")];
答案 0 :(得分:1)
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())
答案 1 :(得分:0)
如果您有某种用户标识符,请为不同的用户使用字典:
NSDictionary *user = @{@"lastTime": @"15:00" };
[[NSUserDefaults standartUserDefaults] setObject:user forKey:@"userId"];
答案 2 :(得分:0)
您必须有一些方法来唯一标识用户,然后在设置/获取lastTime
值
答案 3 :(得分:0)
就我个人而言,我会使用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
,以便您可以对其进行更新,然后将其存储回{{1 }}
答案 4 :(得分:-1)
确保在设置值后,用户将同步userdefaults。 像
[[NSUserDefaults standartUserDefaults] synchronize];