web-dev-qa-db-ja.com

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

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

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

ブール値がすでにnoに設定されており、ユーザーがログイン資格情報を保存すると、ブール値もyesに変更されますか?

86
Sebastien Peek

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

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

[[NSUserDefaults standardUserDefaults] synchronize];

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

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

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
}
10

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

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

あなたの場合はうまくいきますが、実際に設定されて「NO」に設定されている場合は、まだ設定されていないかのような結果が得られるため、何らかのキーが設定されている場合はこのコードで確認しないでくださいまったく設定します。代わりに私は使用します

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

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

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

2
Toastor

in Swift

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

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

あるいは、object(forKey:)を使用してからboolにキャストすることもできます

_if let exists = Defaults.object(forKey: "isLoggedIn"), let isLoggedIn = exists.boolValue where isLoggedIn == true {
  displayMainScreen()
} else {
  displayLoginScreen() 
}
_
0
Suhit Patil