如何在 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()。这可能是一个因素。