【发布时间】:2018-01-03 18:13:33
【问题描述】:
我正在尝试创建 2 个类,一个 Globals 类和一个 Calibration 类,以在整个应用程序运行时记住一个 Calibration 对象。换句话说,Calibration() 将被初始化并且 Globals() 将被初始化以在任何视图控制器中调用 Calibration 对象。它们都将在 HomepageController 的 viewDidLoad() 中初始化。 这是我的 Globals 课程:
class Globals: NSObject, NSCoding {
var aCalValue: Double;
var bCalValue: Double;
var cCalValue: Double;
required init (aValue: Double, bValue: Double, cValue: Double) {
aCalValue = aValue;
bCalValue = bValue;
cCalValue = cValue;
super.init()
}
required init?(coder aDecoder: NSCoder) {
aCalValue = aDecoder.decodeObject(forKey: "aValue") as! Double
bCalValue = aDecoder.decodeObject(forKey: "bValue") as! Double
cCalValue = aDecoder.decodeObject(forKey: "cValue") as! Double
}
func encode(with aCoder: NSCoder) {
aCoder.encode(aCalValue, forKey: "aValue")
aCoder.encode(bCalValue, forKey: "bValue")
aCoder.encode(cCalValue, forKey: "cValue")
}
}
这是我的校准课:
class Calibration {
var a: Double
var b: Double
var c: Double
var user: Globals
init() {
}
func setAValue(a: Double) {
self.a = a;
}
func setBValue(b: Double) {
self.b = b;
}
func setCValue(c: Double) {
self.c = c;
}
func getAValue() -> Double {
return self.a
}
func getBValue() -> Double {
return self.b
}
func getCValue() -> Double {
return self.c
}
func initializeUser() {
user = Globals(aValue: getAValue(), bValue: getBValue(), cValue: getCValue())
}
}
如何使用用户上次打开应用时输入的值来初始化这两个类?
【问题讨论】:
-
编码/解码不起作用。您必须使用
decodeDouble(forKey:)而不进行类型转换,因为就NSCoding而言,Double不是对象。并删除所有分号。它们在 Swift 中是不需要的。
标签: ios swift nsuserdefaults nscoding