Android 공유 환경 설정에 해당하는 iOS


105

저는 Android 앱을 iOS로 포팅하고 있는데, 한 가지는 레벨이 완료 될 때마다 저장하기 위해 Android의 공유 기본 설정이었습니다.

이렇게하면 사용자가 앱으로 돌아 오면 최대 레벨 3 또는 그 무엇이든 알 수 있습니다.

iOS에도 비슷한 메커니즘이 있습니까? 또는 응용 프로그램 특정 파일에 수동으로 작성해야합니까?

그렇다면 내 응용 프로그램에서만 볼 수있는 파일에 어떻게 쓰나요?

감사.


1
iOS에서 이것에 가장 가까운 것은 NSUserDefaults 입니다. 그리고 여기에 저장하고 검색하는 방법의 간단한 예입니다.
Tarek Hallak 2013 년

답변:


203

NSUserDefaults 사용 :- 이것은 언급 한 현재 수준과 같은 작은 데이터 비트에 대한 것입니다. 이것을 남용하지 말고 대용량 데이터베이스로 사용하세요. 필요한 것이 있든 없든 앱을 열 때마다 메모리에로드되기 때문입니다 (앱의 다른 부분에서도이를 사용합니다).

목표 -C :

독서:

NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];

NSString *currentLevelKey = @"currentlevel";

if ([preferences objectForKey:currentLevelKey] == nil)
{
    //  Doesn't exist.
}
else
{
    //  Get current level
    const NSInteger currentLevel = [preferences integerForKey:currentLevelKey];
}

쓰기:

NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];

NSString *currentLevelKey = @"currentlevel";

const NSInteger currentLevel = ...;
[preferences setInteger:currentLevel forKey:currentLevelKey];

//  Save to disk
const BOOL didSave = [preferences synchronize];

if (!didSave)
{
    //  Couldn't save (I've never seen this happen in real world testing)
}

.

빠른:

독서:

let preferences = NSUserDefaults.standardUserDefaults()

let currentLevelKey = "currentLevel"

if preferences.objectForKey(currentLevelKey) == nil {
    //  Doesn't exist
} else {
    let currentLevel = preferences.integerForKey(currentLevelKey)
}

쓰기:

let preferences = NSUserDefaults.standardUserDefaults()

let currentLevelKey = "currentLevel"

let currentLevel = ...
preferences.setInteger(currentLevel, forKey: currentLevelKey)

//  Save to disk
let didSave = preferences.synchronize()

if !didSave {
    //  Couldn't save (I've never seen this happen in real world testing)
}

신속하게 읽기 위해 조건부 바인딩을 사용할 수도 있습니다. if let savedLevel = preferences.integerForKey(currentLevelKey) { currentLevel = savedLevel}
Raghu Teja

4
그 실 거예요 작업 아니 @chitti, integerForKey는 옵션 반환하지 않습니다
SomeGuy

40

Swift 3에 대한 업데이트입니다.

독서

let preferences = UserDefaults.standard

let currentLevelKey = "currentLevel"
if preferences.object(forKey: currentLevelKey) == nil {
    //  Doesn't exist
} else {
    let currentLevel = preferences.integer(forKey: currentLevelKey)
}

쓰기

let preferences = UserDefaults.standard

let currentLevel = ...
let currentLevelKey = "currentLevel"
preferences.set(currentLevel, forKey: currentLevelKey)

최신 정보

에서 UserDefaults 문서

synchronize()기본 데이터베이스에 대한 보류중인 비동기 업데이트를 기다렸다가 반환합니다. 이 방법은 이제 불필요하며 사용해서는 안됩니다.


2
class Configuration {

    static func value<T>(defaultValue: T, forKey key: String) -> T{

        let preferences = UserDefaults.standard
        return preferences.object(forKey: key) == nil ? defaultValue : preferences.object(forKey: key) as! T
    }

    static func value(value: Any, forKey key: String){

        UserDefaults.standard.set(value, forKey: key)
    }

}

//set
Configuration.value(value: "my_value", forKey: "key_1")

//get
let myValue = Configuration.value(defaultValue: "default_value", forKey: "key_1")

-1

이전 답변에 따라 이미 UserDefaultsiOS의 공유 환경 설정과 동일 하다는 것을 알고 있습니다. 데이터 유형에 따라 공통 쓰기 기능과 읽기 작성 기능을 생성 할 수 있습니다. 그리고 어디에서나 필요한 방법을 호출하십시오.

ViewController.swift

 // write data
 writeAnyData(key: "MY_KEY", value: "MyData")
 // read string data 
 readStringData(key: "MY_KEY"), animated: true)

Utils.swift

// read and write user default
let userDefault = UserDefaults.standard
// write
func writeAnyData(key: String, value: Any){
    userDefault.set(value, forKey: key)
    userDefault.synchronize()
}

// read int values
func readIntData(key: String) -> Int{
    if userDefault.object(forKey: key) == nil {
        return 0
    } else {
        return userDefault.integer(forKey: key)
    }
}

// read string values
func readStringData(key: String) -> String{
    if userDefault.object(forKey: key) == nil {
        return ""
    } else {
        return userDefault.string(forKey: key)!
    }
}
// read bool value
func readBoolData(key: String) -> Bool{
    if userDefault.object(forKey: key) == nil {
        return false
    } else {
        return userDefault.bool(forKey: key)
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.