수색…


통사론

  • 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 사용자의 점수를 저장하려고한다고 가정합니다. : 그 다음 하나는 두 가지 방법으로이처럼 우리는 클래스를 만들 수 있습니다 setHighScorehighScore . 높은 점수에 액세스하려는 모든 곳에서이 클래스의 인스턴스를 만듭니다.

빠른

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로 전환). 높은 점수로 작업하는 모든 장소를 변경하는 것에 대해 걱정하지 않아도됩니다.

  2. 스코어에 액세스하거나 쓰기를 원할 때 하나의 메소드 만 호출하기 만하면됩니다.

  3. 버그 나 이와 비슷한 것을 볼 때 간단히 디버깅하십시오.

노트

동기화가 걱정된다면 동기화를 관리하는 싱글 톤 클래스를 사용하는 것이 좋습니다.

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) ?? ""


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow