我目前想检查NSUserDefaults中是否存在用户名,如果不存在我想加载模态视图控制器。问题是即使用户名为nil,它仍然表现得好像存在。这就是我所拥有的:
//Check if the login data exists
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"username"] != nil) {
//Load Login View if no username is found
NSLog(@"No username found");
LoginViewController *loginView = [[LoginViewController alloc] init];
[self presentViewController:loginView animated:YES completion:nil];
}
else {
NSString *savedUsername = [defaults stringForKey:@"username"];
NSLog(@"Username found: %@", savedUsername);
}
我一直在我的NSLog中得到这个: Username found: (null)
任何帮助将不胜感激!
答案 0 :(得分:10)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"username"] == nil) {
//Load Login View if no username is found
NSLog(@"No username found");
LoginViewController *loginView = [[LoginViewController alloc] init];
[self presentViewController:loginView animated:YES completion:nil];
}
else {
NSString *savedUsername = [defaults stringForKey:@"username"];
NSLog(@"Username found: %@", savedUsername);
}
答案 1 :(得分:3)
if ( ! [defaults objectForKey:@"username"] )
答案 2 :(得分:2)
您正在使用!= nil
,这与您想要的相反。将您的第一个if语句更改为:
if ([defaults objectForKey:@"username"] == nil) {
或者只是:
if (![defaults objectForKey:@"username"]) {
答案 3 :(得分:2)
首先,从手机/模拟器中删除应用
将代码替换为,然后运行
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"username"] == nil) {
//Load Login View if no username is found
NSLog(@"No username found");
//set the username,
[defaults setObject:@"username_1" forKey:@"username"];
LoginViewController *loginView = [[LoginViewController alloc] init];
[self presentViewController:loginView animated:YES completion:nil];
}
else {
NSString *savedUsername = [defaults stringForKey:@"username"];
NSLog(@"Username found: %@", savedUsername);
}
要知道:
稍后为关键字“用户名”保存对象
这个条件总是返回false,
([defaults objectForKey:@"username"] == nil)
如果删除以前的安装。 UserDefaults会自动删除。 然后只有你可以尝试这是否正常([默认objectForKey:@“用户名”] ==无)
答案 4 :(得分:2)
您只需尝试此操作即可,无需使用nil
。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"Username"]) {
} else {
}
答案 5 :(得分:1)
正如其他人已经指出的那样,你的测试
if ([defaults objectForKey:@"username"] != nil)
错了。但即使有了
if ([defaults objectForKey:@"username"] == nil)
如果用户默认值包含 不是字符串 的“用户名”值,则会出现问题。在这种情况下,objectforKey
会返回一个值,但stringForKey
会返回nil
。
因此,您应该只使用 stringForKey
:
NSString *savedUsername = [defaults stringForKey:@"username"];
if (savedUsername == nil) {
//Load Login View if no username is found
NSLog(@"No username found");
// ...
} else {
NSLog(@"Username found: %@", savedUsername);
}
答案 6 :(得分:0)
如果你对NULL和NIL感到困惑,你也可以使用这种方法: -
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString*value=[prefs objectForKey:@"username"];
NSLog(@"useremail %@",value);
value=[value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if ([value length]>0)
{
NSString *savedUsername = [defaults stringForKey:@"username"];
NSLog(@"Username found: %@", savedUsername);
}
else {
NSLog(@"No username found");
LoginViewController *loginView = [[LoginViewController alloc] init];
[self presentViewController:loginView animated:YES completion:nil];
}
答案 7 :(得分:0)
试试这种方式。
NSUserDefaults *Def = [NSUserDefaults standardUserDefaults];
if (![Def objectForKey:@"Username"])
{
// Code
}
else
{
//Code
}
这对你有帮助。