我存档了一个采用Codable的对象,并在应用程序进入后台时实现存储对象数据,并在重新打开应用程序时加载它们。
但它不起作用。
如何在终止并重新打开模拟器后检查UserDefaults的更改?
我制作了'Machine'类Codable,并实现了'MachineStore'类来存档Machine对象。
保存数据:
func saveChanges() {
var data = Data()
do {
data = try encoder.encode(self.machine)
} catch {
NSLog(error.localizedDescription)
}
UserDefaults.standard.set(data, forKey: MachineStore.Key)
}
正在加载数据:
func loadMachine() {
guard let data = UserDefaults.standard.data(forKey: MachineStore.Key) else { return }
do {
machine = try decoder.decode(VendingMachine.self, from: data)
} catch {
NSLog(error.localizedDescription)
}
}
我在AppDelegate中使用了MachineStore。
let machineStore: MachineStore = MachineStore()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
machineStore.loadMachine()
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
machineStore.saveChanges()
}
答案 0 :(得分:1)
之前对您的对象进行编码/解码。您可以使用以下代码:
extension UserDefaults {
func persist<Value>(_ value: Value, forKey key: String) where Value : Codable {
guard let data = try? PropertyListEncoder().encode(value) else { return }
set(data, forKey: key)
}
func retrieveValue<Value>(forKey key: String) -> Value? where Value : Codable {
return data(forKey: key).flatMap { try? PropertyListDecoder().decode(Value.self, from: $0) }
}
}