আইওএস: এনএসউসারডেফাল্টসে একটি বুলিয়ান ব্যবহার করুন


88

rootViewControllerআমার অ্যাপ্লিকেশনটির লোড হয়ে গেলে , আমি ব্যবহারকারীদের লগইন শংসাপত্রগুলি সংরক্ষণ করা হয়েছে কিনা তা পরীক্ষা করতে সক্ষম হতে চাই NSUserDefaults

মূলত, যখন ব্যবহারকারী অ্যাপ্লিকেশনটি লোড করে এবং তার / তার লগইন শংসাপত্রগুলি সংরক্ষণ না করে, তখন একটি চাপ দেওয়া modalAlertViewহবে এবং ব্যবহারকারী তাদের শংসাপত্রগুলি যথাযথভাবে সংরক্ষণ করতে সক্ষম হবেন। এটি সেই UITextFieldস্ট্রিংগুলিকে একটি সম্পর্কিত NSUserDefaultঅবজেক্টে সংরক্ষণ করে । যাইহোক, এটি কি সম্ভব, যখন এই সঞ্চয়টি শেষ হয়ে যায়, আমি একটি NSUserDefaultবস্তু তৈরি করতে পারি যা একটি বুলিয়ান এবং হ্যাঁতে মান পরিবর্তন করতে পারে?

এর অর্থ হ'ল বুলিয়ান ইতিমধ্যে না-তে সেট করা আছে এবং যখন ব্যবহারকারী তাদের লগইন শংসাপত্রগুলি সংরক্ষণ করে, তখন এটি বুলিয়ানও হ্যাঁতে পরিবর্তন করে?

উত্তর:


264

আপনি এটি ব্যবহার করে আপনার বুলিয়ান সেট করতে পারেন:

[[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আপনার ডিফল্ট কী এবং মানগুলি অন্তর্ভুক্ত করেন (আপনার ক্ষেত্রে "সংরক্ষিত শংসাপত্রগুলি কী" জন্য কোনও নম্বর নেই) এবং আপনি এটি ব্যবহার করে নিবন্ধভুক্ত করেন 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
এমনকি আপনি এনএসউসারডেফাল্টগুলিতে পাসওয়ার্ডগুলি সংরক্ষণ করার বিষয়ে ভাবেন না।
ক্রজিৎসটোফ প্রিজিগোদা

6

এই সমাধানটি হেনরিক পি। হেসেল দ্বারা প্রস্তাবিত:

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

আপনার ক্ষেত্রে কাজ করবে, তবে মনে রাখবেন যে কোনও কীটি সেট করা থাকলে আপনার এই কোডটি পরীক্ষা করা উচিত নয়, কারণ এটি যদি সত্যই সেট করা থাকে এবং "না" তে সেট করা থাকে তবে আপনি এখনও ফলাফল পেয়ে যাবেন যেন না ঠিক আছে। পরিবর্তে আমি ব্যবহার করতে হবে

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:)তারপর এটি bool এ .ালাই

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()
  }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.