저는 Android 앱을 iOS로 포팅하고 있는데, 한 가지는 레벨이 완료 될 때마다 저장하기 위해 Android의 공유 기본 설정이었습니다.
이렇게하면 사용자가 앱으로 돌아 오면 최대 레벨 3 또는 그 무엇이든 알 수 있습니다.
iOS에도 비슷한 메커니즘이 있습니까? 또는 응용 프로그램 특정 파일에 수동으로 작성해야합니까?
그렇다면 내 응용 프로그램에서만 볼 수있는 파일에 어떻게 쓰나요?
감사.
답변
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)
}
답변
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)
최신 정보
synchronize()
기본 데이터베이스에 대한 보류중인 비동기 업데이트를 기다렸다가 반환합니다. 이 방법은 이제 불필요하며 사용해서는 안됩니다.
답변
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")
답변
이전 답변에 따라 이미 UserDefaults
iOS의 공유 환경 설정과 동일 하다는 것을 알고 있습니다. 데이터 유형에 따라 공통 쓰기 기능과 읽기 작성 기능을 생성 할 수 있습니다. 그리고 어디에서나 필요한 방법을 호출하십시오.
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)
}
}