iOS: NSUserDefaults'da bir boole kullanın


88

Ne zaman rootViewControllerbenim uygulamanın yüklendiği, ben kullanıcıların oturum açma kimlik bilgileri için kayıtlı olup olmadığını kontrol etmek isterler NSUserDefaults.

Temel olarak, kullanıcı uygulamayı yüklediğinde ve oturum açma kimlik bilgileri kaydedilmediğinde, a modalAlertViewitilecek ve kullanıcı kimlik bilgilerini uygun şekilde kaydedebilecektir. Bu, bu UITextFielddizeleri ilgili bir NSUserDefaultnesneye kaydeder . Ancak, bu kaydetme işlemi yapıldığında, NSUserDefaultboole olan bir nesne oluşturup değerini evet olarak değiştirebilmem mümkün mü?

Yani, boole zaten hayır olarak ayarlanmış ve kullanıcı oturum açma kimlik bilgilerini kaydettiğinde, boole değeri de evet olarak değiştiriyor mu?

Yanıtlar:


264

Boole'nizi aşağıdakileri kullanarak ayarlayabilirsiniz:

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

[[NSUserDefaults standardUserDefaults] synchronize];

ve bu kodu kullanarak okuyun:

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

@Henril P. Daha önce oturum açmış olan aynı kullanıcıyı görüntüleyebilir mi
Ajay

10

Bir yöntem yoktur NSUserDefaultsdenir registerDefaults:. Uygulamanızın "varsayılan varsayılanlarını" ayarlamak için bu yöntemi kullanırsınız. Temel olarak, NSDictionaryvarsayılan anahtarlarınızı ve değerlerinizi içeren bir (sizin durumunuzda "kayıtlı kimlik bilgileri" anahtarı için bir HAYIR) oluşturursunuz ve bunu kullanarak kaydedersiniz registerDefaults:. Bu + (void)initialize, varsayılan değerlerin ihtiyaç duyulmadan önce kaydedilmesini sağlamak için genellikle uygulama temsilcisinin yönteminde yapılır . Bu değerler yalnızca uygulamanız değiştirmediyse kullanılır. Diğer bir deyişle, aradığınız anahtar Uygulama Alanında olmadığı sürece kullanılmazlar, yani kullanıcı varsayılanları kullanıcının .plist dosyasından okunur.

Öte yandan, oturum açma kimlik bilgilerini kontrol edebilir ve eksiklerse bir uyarı açabilirsiniz. Bu, boole değerinizi oturum açma kimlik bilgileriyle senkronize tutma ihtiyacını ortadan kaldırır. Daha sonra bir "oturum açma kimlik bilgilerini sil" yeteneği sağlarsanız, boole değerini tekrar HAYIR olarak ayarlamayı hatırlamanız gerekmez. Giriş kimlik bilgileriniz kullanıcının varsayılan değerlerinde kayıtlıysa, şunu yaparsınız:

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
}

Oturum açma kimlik bilgilerini kontrol eden ve kaydedilmemişlerse sadece uyarıyı açan bir yöntem yazmaya nasıl başlayabilirim?
Sebastien Peek

4
Parolaları NSUserDefaults'da saklamayı düşünmemelisiniz bile.
Krzysztof Przygoda

6

Henrik P. Hessel tarafından önerilen bu çözüm:

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

sizin durumunuzda işe yarayacaktır, ancak bazı anahtarlar ayarlandıysa bu kodu kontrol etmemeniz gerektiğini unutmayın, çünkü gerçekten ayarlanmış ve "HAYIR" olarak ayarlanmışsa, yine de değilmiş gibi bir sonuç alacaksınız hiç ayarlayın. Onun yerine kullanırdım

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

2

Önce olarak ayarlamanıza gerek yoktur NO, bunun yerine bir anahtarın ayarlanıp ayarlanmadığını kontrol edebilirsiniz. Değilse ve uygulamanız kimlik bilgilerinin tamamlandığını belirlerse, onu oluşturun ve olarak ayarlayın YES.

Bunu genellikle nasıl yaptığımı görmek için başka bir soruya verdiğim yanıtı kontrol edin .


0

Swift 3'te

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

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

alternatif olarak kullanabiliriz ve object(forKey:)ardından bool yapmak için kullanabiliriz

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

-1

Swift 2.3

Değerleri saklamak için

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

Değerleri almak için

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

Swift 3.0

Değerleri saklamak için

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

değerleri almak için

  UserDefaults.standard().bool(forKey: "logged_in"){
      dashboardScreen()
  }else {
      loginScreen()
  }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.