【发布时间】:2016-01-22 08:37:57
【问题描述】:
如果属性未设置,我正在尝试添加一个后备函数来加载类的存档副本。
我的 setter 工作正常,因此它可以存储值(并且所有 NSCoding 都按预期工作),但是如果我尝试在其他任何地方引用它,而不是使用实际的变量属性,它总是在加载来自 NSUserDefaults。
这是我目前所得到的:
public var currentUser: User? {
get {
var user = self.currentUser
// ^ this totally blows it up
if (user == nil) {
user = User.init(name: "") as? User
if let data = NSUserDefaults.standardUserDefaults().objectForKey("currentUser") as? NSData {
let unarc = NSKeyedUnarchiver(forReadingWithData: data)
user = unarc.decodeObjectForKey("root") as? User
}
}
return user
}
set(value) {
self.currentUser = value
NSUserDefaults.standardUserDefaults().setObject(NSKeyedArchiver.archivedDataWithRootObject(value!), forKey: "currentUser")
}
}
【问题讨论】:
-
你需要显示用户类声明
-
为什么?它有几个基本属性和一个 init 方法。我可以添加它,但我现在在移动设备上,无法访问。
-
因为它需要符合 NSCoding 并且需要保存为 NSData
-
他们是。 NSCoding 工作正常。问题是当在这里覆盖 getter 时,它总是从 NSUserDefaults 中提取而不是返回 currentUser 实例。
标签: ios swift nscoding nskeyedarchiver nskeyedunarchiver