iOS: NSUserDefaults में बूलियन का उपयोग करें


88

जब rootViewControllerमेरा एप्लिकेशन लोड किया जाता है, तो मैं यह जांचना चाहता हूं कि क्या उपयोगकर्ता लॉगिन क्रेडेंशियल सहेजे गए हैं या नहीं NSUserDefaults

असल में, जब उपयोगकर्ता एप्लिकेशन को लोड करता है और उसके पास अपनी लॉगिन क्रेडेंशियल सेव नहीं होती है, तो उसे modalAlertViewधक्का दे दिया जाएगा और उपयोगकर्ता अपने क्रेडेंशियल्स को उचित रूप से सहेजने में सक्षम होगा। यह उन UITextFieldस्ट्रिंग्स को संबंधित NSUserDefaultऑब्जेक्ट में सहेजता है । हालांकि, क्या यह संभव है, कि जब यह बचत हो जाए, तो मैं एक NSUserDefaultऑब्जेक्ट बना सकता हूं जो एक बूलियन है और मान को हां में बदल सकता है?

मतलब यह है कि बूलियन पहले से ही सेट नहीं है, और जब उपयोगकर्ता अपने लॉगिन क्रेडेंशियल्स को बचाता है, तो यह बूलियन को हां में बदलता है?

जवाबों:


263

आप अपने बूलियन का उपयोग करके सेट कर सकते हैं:

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

[[NSUserDefaults standardUserDefaults] synchronize];

और इस कोड का उपयोग करके इसे पढ़ें:

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

@ हेनिल पी। यह वही उपयोगकर्ता प्रदर्शित कर सकता है जो पहले लॉगिन किया गया था
अजय

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
}

मैं एक विधि लिखने के बारे में कैसे जाऊंगा जो लॉगिन क्रेडेंशियल्स की जांच करता है और यदि वे सहेजे नहीं जाते हैं तो बस अलर्ट को पॉप करते हैं?
सेबेस्टियन पीक

4
आपको NSUserDefaults में पासवर्ड संग्रहीत करने के बारे में भी नहीं सोचना चाहिए।
क्रिज़ीस्तोफ़ प्रेज़ीगोड़ा

6

हेनरिक पी। हेसेल द्वारा सुझाया गया यह समाधान:

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

स्विफ्ट 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

स्विफ्ट 2.3

मूल्यों को संग्रहीत करने के लिए

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

मूल्यों को लाने के लिए

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

स्विफ्ट 3.0

मूल्यों को संग्रहीत करने के लिए

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

मान प्राप्त करने के लिए

  UserDefaults.standard().bool(forKey: "logged_in"){
      dashboardScreen()
  }else {
      loginScreen()
  }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.