首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS NSUserDefaults 檢查用戶名:邏輯判斷搞反導致永遠進入 else

     編輯:程式設計綜合問答

錯誤代碼

if ([defaults objectForKey:@"username"] != nil) {
    // 這裡意圖:沒有用戶名才顯示登入頁
    LoginViewController *login = ...;
    [self presentViewController:login ...];
} else {
    NSString *saved = [defaults stringForKey:@"username"];
    NSLog(@"Username found: %@", saved); // 輸出 Username found: (null)
}

問題

  • objectForKey: 回傳 nil 表示鍵不存在
  • 但 stringForKey: 鍵不存在也回傳 nil,NSLog 印出 (null)
  • 邏輯判斷 寫反了:有值時應進入 else 顯示主頁,無值時進入 if 顯示登入

修正

if ([defaults objectForKey:@"username"] == nil) {
    // 無用戶名 → 顯示登入
    LoginViewController *login = ...;
    [self presentViewController:login animated:YES completion:nil];
} else {
    // 有用戶名 → 正常流程
    NSString *saved = [defaults stringForKey:@"username"];
    NSLog(@"Username found: %@", saved);
}

最佳實踐

// 封裝工具方法
- (BOOL)isLoggedIn {
    return [defaults objectForKey:@"username"] != nil;
}

- (NSString *)currentUsername {
    return [defaults stringForKey:@"username"];
}

補充

  • NSUserDefaults 現在建議用 UserDefaults.standard (Swift) 或 [NSUserDefaults standardUserDefaults]
  • 敏感資料(Token、密碼)請用 Keychain 儲存
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved