當我嘗試通過向我的類變量添加一個setter來保存NSUserDefaults(在這種情況下,變量爲id
和authToken
,這些值似乎不會被保存。在斷點處的id
和authToken
,吸氣始終以值設置他們後返回nil偶數。NSUserDefaults不保存在類變量的設置器中
class CurrentUser {
static let defaultInstance = CurrentUser()
func updateUser(id id: String, authToken: String) {
self.id = id
self.authToken = authToken
}
var authToken: String? {
get {
if let authToken = NSUserDefaults.standardUserDefaults().objectForKey("userAuthToken") {
return (authToken as! String)
} else {
return nil
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(authToken, forKey: "userAuthToken")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
var id: String? {
get {
if let id = NSUserDefaults.standardUserDefaults().objectForKey("userId") {
return (id as! String)
} else {
return nil
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(id, forKey: "userId")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
}
然而,當我拉的線條勾勒出的UpdateUser兩個函數(一級以上),所有的作品如預期。
class CurrentUser {
static let defaultInstance = CurrentUser()
func updateUser(id id: String, authToken: String) {
NSUserDefaults.standardUserDefaults().setObject(id, forKey: "userId")
NSUserDefaults.standardUserDefaults().synchronize()
NSUserDefaults.standardUserDefaults().setObject(authToken, forKey: "userAuthToken")
NSUserDefaults.standardUserDefaults().synchronize()
}
var authToken: String? {
get {
if let authToken = NSUserDefaults.standardUserDefaults().objectForKey("userAuthToken") {
return (authToken as! String)
} else {
return nil
}
}
}
var id: String? {
get {
if let id = NSUserDefaults.standardUserDefaults().objectForKey("userId") {
return (id as! String)
} else {
return nil
}
}
}
}
這是爲什麼?我錯過了什麼? {set}是否在NSUserDefaults不可訪問的另一個線程/模式下運行?
爲什麼不加載/對象的生命週期中保存,並保持它們作爲簡單的實例變量?它過度設計。 – Droppy
@Droppy你能解釋一下你的意思嗎? – Alex
在init期間加載值並在dealloc期間保存(或者在swift中調用的任何值),並將值保存爲普通實例變量。或者有明確的加載/保存方法。我懷疑每次更改時都需要同步到用戶默認設置。 – Droppy