相当于 Android 共享首选项的 iOS 系统

我正在将一个 Android 应用移植到 iOS 上,我使用的一件事情是 Android 中的共享首选项,以便在每次完成一个级别时保存它。

这样当用户回到应用程序时,他们就可以看到他们已经升到了3级或者其他级别。

在 iOS 中是否有类似的机制? 或者我必须手动写出应用程序特定的文件?

如果是,如何写出只对应用程序可见的文件?

谢谢。

77460 次浏览

使用 < em > NSUserDefault :-请注意,这是针对小数据位的,比如您提到的当前级别。不要滥用它,把它当作一个大型数据库使用,因为每次打开应用程序时,它都会被装入内存,无论你是否需要它的内容(应用程序的其他部分也会使用它)。

目标 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)

更新

来自 UserDefault 文档

synchronize()等待对默认数据库的任何挂起的异步更新并返回; 这个方法现在是不必要的,不应该使用。

根据前面的答案,您已经知道 UserDefaults相当于 ios 中的共享首选项。您可以根据数据类型创建公共写入函数和用于读取的创建函数。并从任何地方调用所需的方法。

ViewController Swift

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

Utills 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)
}
}
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")