खोज…


वाक्य - विन्यास

  • UserDefaults.standard.set(dic, forKey: "LoginSession") //Save value inside userdefaults

    • UserDefaults.standard.object(forKey: "LoginSession") as? [String:AnyObject] ?? [:] //Get value from UserDefaults

टिप्पणियों

NSUserDefault जो सभी प्रकार के DataType को संग्रहीत करने के लिए उपयोग किया जाता है, और आप ऐप के वर्ग में कहीं भी इसका मूल्य प्राप्त कर सकते हैं। NSUserDefault

मान सेट करना

NSUserDefaults में मान सेट करने के लिए, आप निम्न कार्यों का उपयोग कर सकते हैं:

स्विफ्ट <३

setBool(_:forKey:)
setFloat(_:forKey:)
setInteger(_:forKey:)
setObject(_:forKey:)
setDouble(_:forKey:)
setURL(_:forKey:)

स्विफ्ट 3

स्विफ्ट 3 में फंक्शन के नाम set फोलोएड के प्रकार से set करने के लिए बदल दिए जाते हैं।

set(_:forKey:) 

उद्देश्य सी

-(void)setBool:(BOOL)value forKey:(nonnull NSString *)defaultName;
-(void)setFloat:(float)value forKey:(nonnull NSString *)defaultName;
-(void)setInteger:(NSInteger)value forKey:(nonnull NSString *)defaultName;
-(void)setObject:(nullable id)value forKey:(nonnull NSString *)defaultName;
-(void)setDouble:(double)value forKey:(nonnull NSString *)defaultName;
-(void)setURL:(nullable NSURL *)value forKey:(nonnull NSString *)defaultName;

उदाहरण का उपयोग होगा:

स्विफ्ट <३

NSUserDefaults.standardUserDefaults.setObject("Netherlands", forKey: "HomeCountry")

स्विफ्ट 3

UserDefaults.standard.set("Netherlands", forKey: "HomeCountry")

उद्देश्य सी

[[NSUserDefaults standardUserDefaults] setObject:@"Netherlands" forKey:@"HomeCountry"];

कस्टम ऑब्जेक्ट्स

कस्टम वस्तुओं को 'NSUserDefaults' में सहेजने के लिए आपको 'CustomCass' को 'NSCoding` के प्रोटोकॉल की पुष्टि करने की आवश्यकता है। आपको निम्नलिखित विधियों को लागू करने की आवश्यकता है:

तीव्र

public func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(name, forKey:"name")
    aCoder.encodeObject(unitId, forKey: "unitId")
}
    
required public init(coder aDecoder: NSCoder) {
    super.init()
    name = aDecoder.decodeObjectForKey("name") as? String
    unitId = aDecoder.decodeIntegerForKey("unitId") as? NSInteger
}

उद्देश्य सी

- (id)initWithCoder:(NSCoder *)coder {
    self = [super init];
    if (self) {
        name = [coder decodeObjectForKey:@"name"];
        unitId = [coder decodeIntegerForKey:@"unitId"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder*)coder {
    [coder encodeObject:name forKey:@"name"];
    [coder encodeInteger:unitId forKey:@"unitId"];
}

डिफ़ॉल्ट मान प्राप्त करना

NSUserDefaults में एक मान प्राप्त करने के लिए आप निम्नलिखित कार्यों का उपयोग कर सकते हैं:

तीव्र

arrayForKey(_:)
boolForKey(_:)
dataForKey(_:)
dictionaryForKey(_:)
floatForKey(_:)
integerForKey(_:)
objectForKey(_:)
stringArrayForKey(_:)
stringForKey(_:)
doubleForKey(_:)
URLForKey(_:)

उद्देश्य सी

-(nullable NSArray *)arrayForKey:(nonnull NSString *)defaultName;
-(BOOL)boolForKey:(nonnull NSString *)defaultName;
-(nullable NSData *)dataForKey:(nonnull NSString *)defaultName;
-(nullable NSDictionary<NSString *, id> *)dictionaryForKey:(nonnull NSString *)defaultName;
-(float)floatForKey:(nonnull NSString *)defaultName;
-(NSInteger)integerForKey:(nonnull NSString *)defaultName;
-(nullable id)objectForKey:(nonnull NSString *)key;
-(nullable NSArray<NSString *> *)stringArrayForKey:(nonnull NSString *)defaultName;
-(nullable NSString *)stringForKey:(nonnull NSString *)defaultName;
-(double)doubleForKey:(nonnull NSString *)defaultName;
-(nullable NSURL *)URLForKey:(nonnull NSString *)defaultName;

उदाहरण का उपयोग होगा:

तीव्र

let homeCountry = NSUserDefaults.standardUserDefaults().stringForKey("HomeCountry")

उद्देश्य सी

NSString *homeCountry = [[NSUserDefaults standardUserDefaults] stringForKey:@"HomeCountry"];

मान बचाना

NSUserDefaults को सिस्टम द्वारा समय-समय पर डिस्क पर लिखा जाता है, लेकिन कई बार ऐसा होता है जब आप चाहते हैं कि आपके परिवर्तन तुरंत सहेजे जाएं, जैसे कि ऐप बैकग्राउंड स्टेट में ट्रांसफ़र करता है। इसे synchronize करके कॉल किया जाता है।

तीव्र

NSUserDefaults.standardUserDefaults().synchronize()

उद्देश्य सी

[[NSUserDefaults standardUserDefaults] synchronize];

डेटा बचाने और पढ़ने के लिए प्रबंधकों का उपयोग करें

हालांकि आप कहीं भी NSUserDefaults विधियों का उपयोग कर सकते हैं, लेकिन कभी-कभी आपके लिए NSUserDefaults से सहेजने और पढ़ने वाले प्रबंधक को परिभाषित करना बेहतर हो सकता है और फिर अपने डेटा को पढ़ने या लिखने के लिए उस प्रबंधक का उपयोग करें।

मान लीजिए कि हम उपयोगकर्ता के स्कोर को NSUserDefaults में सहेजना चाहते हैं। हम नीचे की तरह एक क्लास बना सकते हैं जिसमें दो विधियाँ हैं: setHighScore और highScore । कहीं भी आप उच्च स्कोर का उपयोग करना चाहते हैं, इस वर्ग का एक उदाहरण बनाएं।

तीव्र

public class ScoreManager: NSObject {

    let highScoreDefaultKey = "HighScoreDefaultKey"

    var highScore = {
        set {
            // This method includes your implementation for saving the high score
            // You can use NSUserDefaults or any other data store like CoreData or
            // SQLite etc.
    
            NSUserDefaults.standardUserDefaults().setInteger(newValue, forKey: highScoreDefaultKey)
            NSUserDefaults.standardUserDefaults().synchronize()
        }
        get {
        //This method includes your implementation for reading the high score

            let score = NSUserDefaults.standardUserDefaults().objectForKey(highScoreDefaultKey)
    
            if (score != nil) {
                return score.integerValue;
            } else {
                //No high score available, so return -1
                return -1;
            }
        }
    }
}

उद्देश्य सी

#import "ScoreManager.h"

#define HIGHSCRORE_KEY @"highScore"

@implementation ScoreManager

- (void)setHighScore:(NSUInteger) highScore {
    // This method includes your implementation for saving the high score
    // You can use NSUserDefaults or any other data store like CoreData or
    // SQLite etc.

    [[NSUserDefaults standardUserDefaults] setInteger:highScore forKey:HIGHSCRORE_KEY];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (NSInteger)highScore
{

    //This method includes your implementation for reading the high score

    NSNumber *highScore = [[NSUserDefaults standardUserDefaults] objectForKey:HIGHSCRORE_KEY];
    if (highScore) {
        return highScore.integerValue;
    }else
    {
        //No high score available, so return -1

        return -1;
    }

}

@end

लाभ यह हैं कि:

  1. आपकी पढ़ने और लिखने की प्रक्रिया का कार्यान्वयन केवल एक ही स्थान पर है और आप इसे बदल सकते हैं (उदाहरण के लिए NSUserDefaults से Core Data तक स्विच करें) जब भी आप चाहें और उन सभी स्थानों को बदलने के बारे में चिंता न करें जो आप उच्च स्कोर के साथ काम कर रहे हैं।

  2. जब आप स्कोर करना चाहते हैं या लिखना चाहते हैं, तो केवल एक विधि को कॉल करें।

  3. बस इसे डीबग करें जब आप एक बग या ऐसा कुछ देखते हैं।

ध्यान दें

यदि आप सिंक्रनाइज़ेशन के बारे में चिंतित हैं, तो एकल वर्ग का उपयोग करना बेहतर है जो सिंक्रनाइज़ेशन का प्रबंधन करता है।

NSUserDefaults साफ़ करना

तीव्र

let bundleIdentifier = NSBundle.mainBundle().bundleIdentifier()

NSUserDefaults.standardUserDefaults().removePersistentDomainForName(bundleIdentifier)

उद्देश्य सी

NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName: bundleIdentifier];

उपयोगकर्ता स्विफ्ट 3 में स्विफ्ट का उपयोग करता है

UserDefaults में अनुप्रयोग के अंदर उपयोगकर्ता सत्र या उपयोगकर्ता से संबंधित विवरण को संग्रहीत करने के लिए आवश्यक प्रत्येक एप्लिकेशन। यदि हमने UserDefaults को बेहतर तरीके से प्रबंधित करने के लिए कक्षा के अंदर पूरे तर्क बनाए।

स्विफ्ट 3

import Foundation

public struct Session {

    fileprivate static let defaults = UserDefaults.standard

    enum userValues: String {
        case auth_token
        case email
        case fname
        case mobile
        case title
        case userId
        case userType
        case OTP
        case isApproved
    }
    
    
    //MARK: - Getting here User Details
    static func getUserSessionDetails()->[String:AnyObject]? {
        let dictionary = defaults.object(forKey: "LoginSession") as? [String:AnyObject]
        return  dictionary
    }
    
    //MARK: - Saving Device Token
    static func saveDeviceToken(_ token:String){
        guard (gettingDeviceToken() ?? "").isEmpty else {
            return
        }
        defaults.removeObject(forKey: "deviceToken")
        defaults.set(token, forKey: "deviceToken")
        defaults.synchronize()
    }
    
    //MARK: - Getting Token here
    static func gettingDeviceToken()->String?{
        let token = defaults.object(forKey: "deviceToken") as? String
        if token == nil{
            return ""
        }else{ return token}
    }
    
    //MARK: - Setting here User Details
    static func setUserSessionDetails(_ dic :[String : AnyObject]){
        defaults.removeObject(forKey: "LoginSession")
        defaults.set(dic, forKey: "LoginSession")
        defaults.synchronize()
    }
    
    //MARK:- Removing here all Default Values
    static func userSessionLogout(){
        //Set Activity
        defaults.removeObject(forKey: "LoginSession")
        defaults.synchronize()
    }
    
    //MARK: - Get value from session here
    static func getUserValues(value: userValues) -> String? {
        let dic = getUserSessionDetails() ?? [:]
        guard let value = dic[value.rawValue] else{
            return ""
        }
        return value as? String
    }
    
}

UserDefaults कक्षा का उपयोग

//Saving user Details
Session.setUserSessionDetails(json ?? [:])

//Retriving user Details 
let userId = Session.getUserValues(value: .userId) ?? ""


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow