如何在 Swift 中将 NSUserDefaults 与 属性 getter 和 setter 一起使用?
How to use NSUserDefaults with property getter and setter in Swift?
我正在尝试直接从其 setter 和 getter 属性 保存和检索内存中的变量,但 getter 导致无限循环和应用程序崩溃并显示错误消息:
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=2, address=0x10049b9a0).
The process has been returned to the state before expression evaluation.
可能是什么原因以及如何正确执行此操作?
class Task {
let memory = NSUderDefaults.standardUserDefaults()
var taskList: [String: Double]{
get {
let savedList = memory.dictionaryForKey("SavedTasksList") as? [String: Double] ?? [String: Double]()
return savedList
}
set (tasks){
memory.setObject(tasks, forKey: "SavedTasksList")
}
}
}
你的意思是这样的吗?
class Task {
var taskList: [String: Double]{
get {
return NSUserDefaults.standardUserDefaults().objectForKey("SavedTasksList") as? [String: Double] ?? [String: Double]()
}
set {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(newValue, forKey: "SavedTasksList")
defaults.synchronize()
}
}
}
或在Swift 3:
class Task {
var taskList: [String: Double]{
get {
return UserDefaults.standardUserDefaults().objectForKey("SavedTasksList") as? [String: Double] ?? [String: Double]()
}
set {
let defaults = UserDefaults.standardUserDefaults()
defaults.setObject(newValue, forKey: "SavedTasksList")
defaults.synchronize()
}
}
}
在您的示例中,@irkinosor,在执行 update/set 时,您没有在名为 "memory" 的 NSUserDefaults 实例上调用 synchronize()。这可能是一个因素。
我正在尝试直接从其 setter 和 getter 属性 保存和检索内存中的变量,但 getter 导致无限循环和应用程序崩溃并显示错误消息:
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=2, address=0x10049b9a0). The process has been returned to the state before expression evaluation.
可能是什么原因以及如何正确执行此操作?
class Task {
let memory = NSUderDefaults.standardUserDefaults()
var taskList: [String: Double]{
get {
let savedList = memory.dictionaryForKey("SavedTasksList") as? [String: Double] ?? [String: Double]()
return savedList
}
set (tasks){
memory.setObject(tasks, forKey: "SavedTasksList")
}
}
}
你的意思是这样的吗?
class Task {
var taskList: [String: Double]{
get {
return NSUserDefaults.standardUserDefaults().objectForKey("SavedTasksList") as? [String: Double] ?? [String: Double]()
}
set {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(newValue, forKey: "SavedTasksList")
defaults.synchronize()
}
}
}
或在Swift 3:
class Task {
var taskList: [String: Double]{
get {
return UserDefaults.standardUserDefaults().objectForKey("SavedTasksList") as? [String: Double] ?? [String: Double]()
}
set {
let defaults = UserDefaults.standardUserDefaults()
defaults.setObject(newValue, forKey: "SavedTasksList")
defaults.synchronize()
}
}
}
在您的示例中,@irkinosor,在执行 update/set 时,您没有在名为 "memory" 的 NSUserDefaults 实例上调用 synchronize()。这可能是一个因素。