iOS:NSUserDefaultsでブール値を使用する


88

ときにrootViewController私のアプリケーションのがロードされ、私は、ユーザーのログイン認証情報がに保存されているかどうかを確認することができるようにしたいですNSUserDefaults

基本的に、ユーザーがアプリケーションをロードし、ユーザーがログイン資格情報を保存していない場合、modalAlertViewがプッシュされ、ユーザーは資格情報を適切に保存できます。これにより、それらのUITextField文字列がそれぞれのNSUserDefaultオブジェクトに保存されます。しかし、この保存が完了したらNSUserDefault、ブール値であるオブジェクトを作成して値をyesに変更できるということは可能ですか?

ブール値がすでにnoに設定されていることを意味し、ユーザーがログイン認証情報を保存すると、ブール値もyesに変更されますか?

回答:


263

次を使用してブール値を設定できます。

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"];

[[NSUserDefaults standardUserDefaults] synchronize];

そして、このコードを使用してそれを読んでください:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
    [self displayLogin];
} else {
    [self displayMainScreen];
}

それは以前にログインしたのと同じユーザーに表示@Henril P .Can
アジャイ

10

NSUserDefaultsと呼ばれるメソッドがありregisterDefaults:ます。このメソッドを使用して、アプリケーションの「デフォルトのデフォルト」を設定します。基本的に、NSDictionaryデフォルトのキーと値(この場合は「保存された資格情報」キーのNO)を含むを作成し、を使用して登録しregisterDefaults:ます。これは、アプリデリゲートの+ (void)initializeメソッドで頻繁に行われ、デフォルトが必要になる前にデフォルトが登録されるようにします。これらの値は、アプリで置き換えられていない場合にのみ使用されます。つまり、探しているキーがアプリケーションドメインにない限り、つまりユーザーのデフォルトがユーザーの.plistファイルから読み取られない限り、それらは使用されません。

一方、ログイン資格情報を確認し、欠落している場合はアラートをポップアップすることもできます。これにより、ブール値をログイン資格情報と同期させる必要がなくなります。後で「ログイン資格情報の削除」機能を提供する場合、ブール値をNOに戻すことを覚えておく必要はありません。ログイン認証情報がユーザーのデフォルトで保存されている場合は、次のようにします。

NSString *userID = [[NSUserDefaults standardUserDefaults] stringForKey:@"userID"];
NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"];
if (userID != nil && password != nil) {
    // Code to log user in
} else {
    // Code to pop up an alert
}

ログイン資格情報をチェックし、保存されていない場合はアラートをポップアップするメソッドをどのように記述すればよいですか?
Sebastien Peek

4
NSUserDefaultsにパスワードを保存することさえ考えるべきではありません。
Krzysztof Przygoda

6

Henrik P. Hesselによって提案されたこのソリューション:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
[self displayLogin];
} else {
[self displayMainScreen];
}

はあなたのケースで機能しますが、いくつかのキーが設定されている場合はこのコードを確認しないでください。実際に設定されて "NO"に設定されている場合でも、そうではないかのように結果が得られます。まったく設定しました。代わりに私は

if([[NSUserDefaults standardUserDefaults] objectForKey:@"logged_in"] == nil) {
    //Do something
}

2

最初にを設定する必要はありませんがNO、キーが設定されているかどうかを確認できます。そうでなく、アプリが認証情報が完全であると判断した場合は、それを作成してに設定しYESます。

別の質問に対する私の回答をチェックして、私がこれを通常どのように行うかを確認しください。


0

Swift 3

let Defaults = UserDefaults.standard()()
let exists = Defaults.bool(forKey: "isLoggedIn")

if !exists {
   displayLoginScreen()            
} else {
   print("value exists..do something")
   displayMainScreen()       
}     

または、使用object(forKey:)してブールにキャストすることもできます

if let exists = Defaults.object(forKey: "isLoggedIn"), let isLoggedIn = exists.boolValue where isLoggedIn == true {
  displayMainScreen()
} else {
  displayLoginScreen() 
}

-1

Swift 2.3

値を保存するには

    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "logged_in") 

値をフェッチするため

  if NSUserDefaults.standardUserDefaults().boolForKey("logged_in") == true {
      dashboardScreen()
  }else {
      loginScreen()
  }

Swift 3.0

値を保存するには

  UserDefaults.standard().setBool(true, forKey: "logged_in")

値を取得する

  UserDefaults.standard().bool(forKey: "logged_in"){
      dashboardScreen()
  }else {
      loginScreen()
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.