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
に値を設定するには、次の関数を使用できます。
スイフト<3
setBool(_:forKey:)
setFloat(_:forKey:)
setInteger(_:forKey:)
setObject(_:forKey:)
setDouble(_:forKey:)
setURL(_:forKey:)
スウィフト3
Swift 3では、関数の名前が、型によってset
されたset
変更さset
ます。
set(_:forKey:)
目標-C
-(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;
使用例は次のようになります。
スイフト<3
NSUserDefaults.standardUserDefaults.setObject("Netherlands", forKey: "HomeCountry")
スウィフト3
UserDefaults.standard.set("Netherlands", forKey: "HomeCountry")
目標-C
[[NSUserDefaults standardUserDefaults] setObject:@"Netherlands" forKey:@"HomeCountry"];
カスタムオブジェクト
カスタムオブジェクトを `NSUserDefaults`に保存するには、CustomClassを` 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
}
目標-C
- (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(_:)
目標-C
-(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")
目標-C
NSString *homeCountry = [[NSUserDefaults standardUserDefaults] stringForKey:@"HomeCountry"];
値の保存
NSUserDefaults
はシステムによって定期的にディスクに書き込まれますが、アプリケーションがバックグラウンド状態に移行したときなど、すぐに変更を保存したい場合があります。これは、 synchronize
を呼び出すことによって行われます。
迅速
NSUserDefaults.standardUserDefaults().synchronize()
目標-C
[[NSUserDefaults standardUserDefaults] synchronize];
マネージャを使用したデータの保存と読み取り
あなたが使用することができますがNSUserDefaults
どこかの方法を、時々から保存し、読み込むマネージャを定義するために改善することができますNSUserDefaults
あなたのためにしてから、データを読み書きするためにそのマネージャを使用しています。
ユーザーのスコアをNSUserDefaults
に保存するとします。以下のような2つのメソッド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;
}
}
}
}
目標-C
#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に切り替えることができます。スコアにアクセスしたり、書き込みをしたいときは、単に1つのメソッドだけを呼び出すだけです。
バグやそのようなことがあるときには、単にデバッグしてください。
注意
同期が心配な場合は、同期を管理するシングルトンクラスを使用する方がよいでしょう。
NSUserDefaultsのクリア
迅速
let bundleIdentifier = NSBundle.mainBundle().bundleIdentifier()
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(bundleIdentifier)
目標-C
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName: bundleIdentifier];
Swift 3でのUserDefaultsの使用
すべてのアプリケーションは、UserDefaultsにアプリケーション内にUser SessionまたはUser関連の詳細を格納する必要がありました.Superでは、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) ?? ""