我试图直接从其setter和getter属性保存和检索内存中的变量但是getter导致无限循环并且应用程序崩溃并显示错误消息:
错误:执行被中断,原因:EXC_BAD_ACCESS(代码= 2,地址= 0x10049b9a0)。 该过程已返回到表达式评估之前的状态。
可能是什么原因以及如何正确地做到这一点?
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")
}
}
}
答案 0 :(得分:5)
你的意思是这样吗?
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()
}
}
}
答案 1 :(得分:0)
在你的例子中,@ irkinosor,你没有在名为" memory"的NSUserDefaults实例上调用synchronize()。执行更新/设置时。这可能是一个因素。