簡體   English   中英

檢查NSUserDefaults中是否存在用戶名?

[英]Checking if Username Exists in NSUserDefaults?

我當前要檢查用戶名是否存在於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)

任何幫助,將不勝感激!

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);

    }
if ( ! [defaults objectForKey:@"username"] )

您正在使用!= nil ,這與您想要的相反。 將您的第一個if語句更改為:

if ([defaults objectForKey:@"username"] == nil) {

要不就:

if (![defaults objectForKey:@"username"]) {

首先,從手機/模擬器中刪除該應用

在此處輸入圖片說明

以此替換代碼 ,然后運行

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自動被刪除。 那么只有您可以嘗試此方法是否有效([defaults objectForKey:@“ username”] == nil)

您可以簡單地嘗試此操作,而無需使用nil

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if (![defaults objectForKey:@"Username"]) {

} else {

}

正如其他人已經指出的那樣,您的測試

if ([defaults objectForKey:@"username"] != nil)

是錯的。 但是即使

if ([defaults objectForKey:@"username"] == nil)

如果用戶默認值包含不是字符串的 “ username”值,則會遇到問題 在這種情況下, 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);
}

如果您對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]; 
  }

嘗試這種方式。

NSUserDefaults *Def = [NSUserDefaults standardUserDefaults];

    if (![Def objectForKey:@"Username"]) 
    {
       // Code 
    } 
    else
    {
       //Code
    }

這確實會對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM