iOS
NSUserDefaults
खोज…
वाक्य - विन्यास
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
लाभ यह हैं कि:
आपकी पढ़ने और लिखने की प्रक्रिया का कार्यान्वयन केवल एक ही स्थान पर है और आप इसे बदल सकते हैं (उदाहरण के लिए
NSUserDefaults
से Core Data तक स्विच करें) जब भी आप चाहें और उन सभी स्थानों को बदलने के बारे में चिंता न करें जो आप उच्च स्कोर के साथ काम कर रहे हैं।जब आप स्कोर करना चाहते हैं या लिखना चाहते हैं, तो केवल एक विधि को कॉल करें।
बस इसे डीबग करें जब आप एक बग या ऐसा कुछ देखते हैं।
ध्यान दें
यदि आप सिंक्रनाइज़ेशन के बारे में चिंतित हैं, तो एकल वर्ग का उपयोग करना बेहतर है जो सिंक्रनाइज़ेशन का प्रबंधन करता है।
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) ?? ""