Saat rootViewController
aplikasi saya dimuat, saya ingin dapat memeriksa apakah kredensial login pengguna telah disimpan ke NSUserDefaults
.
Pada dasarnya, ketika pengguna memuat aplikasi dan dia tidak menyimpan kredensial loginnya, a modalAlertView
akan didorong dan pengguna akan dapat menyimpan kredensial mereka dengan tepat. Ini menyimpan UITextField
string tersebut ke NSUserDefault
objek masing-masing . Namun, apakah mungkin, saat penyimpanan ini selesai, saya bisa membuat NSUserDefault
objek yang berupa boolean dan mengubah nilainya menjadi ya?
Artinya, boolean sudah disetel ke no, dan saat pengguna menyimpan kredensial loginnya, boolean juga akan diubah menjadi ya?
sumber
Ada metode dalam
NSUserDefaults
memanggilregisterDefaults:
. Anda menggunakan metode ini untuk menyetel "default default" aplikasi Anda. Pada dasarnya, Anda membuat yangNSDictionary
berisi kunci dan nilai default Anda (dalam kasus Anda, NO untuk kunci "kredensial yang disimpan"), dan Anda mendaftarkannya menggunakanregisterDefaults:
. Ini jika sering dilakukan dalam+ (void)initialize
metode delegasi aplikasi untuk memastikan bahwa default Anda telah terdaftar sebelum diperlukan. Nilai-nilai ini hanya digunakan jika aplikasi Anda belum menggantinya. Dengan kata lain, mereka tidak akan digunakan kecuali kunci yang Anda cari tidak ada dalam Domain Aplikasi, yaitu, default pengguna membaca dari file .plist pengguna.Di sisi lain, Anda bisa saja memeriksa kredensial masuk dan memunculkan peringatan jika hilang. Ini menghilangkan keharusan untuk tetap menyinkronkan nilai boolean Anda dengan kredensial login. Jika nanti Anda memberikan kemampuan "hapus kredensial login", Anda tidak perlu ingat untuk menyetel kembali boolean ke NO. Jika kredensial login Anda disimpan di default pengguna, Anda akan melakukan ini:
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 }
sumber
Solusi ini, disarankan oleh Henrik P. Hessel:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) { [self displayLogin]; } else { [self displayMainScreen]; }
akan berfungsi dalam kasus Anda, tetapi perlu diingat bahwa Anda tidak boleh memeriksa dengan kode ini jika beberapa kunci disetel sama sekali, karena jika sebenarnya disetel dan disetel ke "TIDAK", Anda masih akan mendapatkan hasil seolah-olah tidak diatur sama sekali. Sebaliknya saya akan menggunakan
if([[NSUserDefaults standardUserDefaults] objectForKey:@"logged_in"] == nil) { //Do something }
sumber
Anda tidak perlu menyetelnya terlebih dahulu
NO
, sebagai gantinya Anda dapat memeriksa apakah ada kunci yang disetel sama sekali. Jika tidak, dan jika aplikasi Anda menentukan bahwa kredensial sudah lengkap, buat saja dan setel keYES
.Periksa jawaban saya untuk pertanyaan lain untuk melihat bagaimana saya biasanya melakukan ini.
sumber
di Swift 3
let Defaults = UserDefaults.standard()() let exists = Defaults.bool(forKey: "isLoggedIn") if !exists { displayLoginScreen() } else { print("value exists..do something") displayMainScreen() }
alternatifnya kita bisa gunakan
object(forKey:)
lalu cast ke boolif let exists = Defaults.object(forKey: "isLoggedIn"), let isLoggedIn = exists.boolValue where isLoggedIn == true { displayMainScreen() } else { displayLoginScreen() }
sumber
Swift 2.3.0
Untuk menyimpan nilai
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "logged_in")
Untuk mengambil nilai
if NSUserDefaults.standardUserDefaults().boolForKey("logged_in") == true { dashboardScreen() }else { loginScreen() }
Swift 3.0.0
Untuk menyimpan nilai
UserDefaults.standard().setBool(true, forKey: "logged_in")
untuk mengambil nilai
UserDefaults.standard().bool(forKey: "logged_in"){ dashboardScreen() }else { loginScreen() }
sumber