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
신속한 3 함수의 이름이 변경되고 set
의 insted set
형태로 folloed.
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
를 호출 synchronize
수행됩니다.
빠른
NSUserDefaults.standardUserDefaults().synchronize()
목표 -C
[[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;
}
}
}
}
목표 -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
장점은 다음과 같습니다.
읽기 및 쓰기 프로세스의 구현은 한 곳에서만 가능하며 원하는 경우 언제든지 변경할 수 있습니다 (예 :
NSUserDefaults
에서 Core Data로 전환). 높은 점수로 작업하는 모든 장소를 변경하는 것에 대해 걱정하지 않아도됩니다.스코어에 액세스하거나 쓰기를 원할 때 하나의 메소드 만 호출하기 만하면됩니다.
버그 나 이와 비슷한 것을 볼 때 간단히 디버깅하십시오.
노트
동기화가 걱정된다면 동기화를 관리하는 싱글 톤 클래스를 사용하는 것이 좋습니다.
NSUserDefaults 지우기
빠른
let bundleIdentifier = NSBundle.mainBundle().bundleIdentifier()
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(bundleIdentifier)
목표 -C
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName: bundleIdentifier];
Swift 3에서 UserDefaults 사용
모든 응용 프로그램은 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) ?? ""