アプリケーションのrootViewController
がロードされたら、ユーザーのログイン資格情報がNSUserDefaults
に保存されているかどうかを確認できるようにします。
基本的に、ユーザーがアプリケーションを読み込み、ログイン資格情報を保存していない場合、modalAlertView
がプッシュされ、ユーザーは資格情報を適切に保存できます。これにより、それらのUITextField
文字列がそれぞれのNSUserDefault
オブジェクトに保存されます。ただし、この保存が完了したら、ブール値であるNSUserDefault
オブジェクトを作成し、値をyesに変更できますか?
ブール値がすでにnoに設定されており、ユーザーがログイン資格情報を保存すると、ブール値もyesに変更されますか?
以下を使用してブール値を設定できます。
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"];
[[NSUserDefaults standardUserDefaults] synchronize];
このコードを使用してそれを読んでください:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
[self displayLogin];
} else {
[self displayMainScreen];
}
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
}
Henrik P. Hesselによって提案されたこのソリューション:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
[self displayLogin];
} else {
[self displayMainScreen];
}
あなたの場合はうまくいきますが、実際に設定されて「NO」に設定されている場合は、まだ設定されていないかのような結果が得られるため、何らかのキーが設定されている場合はこのコードで確認しないでくださいまったく設定します。代わりに私は使用します
if([[NSUserDefaults standardUserDefaults] objectForKey:@"logged_in"] == nil) {
//Do something
}
最初にNO
に設定する必要はありません。代わりに、キーが設定されているかどうかを確認できます。そうでない場合、およびアプリが資格情報が完全であると判断した場合は、作成してYES
に設定します。
別の質問に対する私の答え をチェックして、私がこれをどのように行うかを確認してください。
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()
}
_