1
これは私のカスタムデモクラスです:Swiftオプションがゼロになるのはなぜですか?
class Demo: NSObject, NSCoding {
var id: Int?
override init() {
super.init()
}
required init?(coder aDecoder: NSCoder) {
self.id = aDecoder.decodeIntegerForKey("ID")
}
func encodeWithCoder(aCoder: NSCoder) {
if let id = self.id{
aCoder.encodeInteger(id, forKey: "ID")
}
}
}
保存私は、オブジェクトを作成し、このようなNSUserDefaultsに保存しています
let demo = Demo()
let archiveData = NSKeyedArchiver.archivedDataWithRootObject(demo)
NSUserDefaults.standardUserDefaults().setObject(archiveData, forKey: "ff")
デバッグ結果は、それが良い
を動作することを示しています今私はこのようにNSUserDefaultsからオブジェクトを選んだ:
let retainData = NSUserDefaults.standardUserDefaults().objectForKey("ff") as! NSData
let retainDemo = NSKeyedUnarchiver.unarchiveObjectWithData(retainData) as! Demo
は今、デバッグ後に私が発見した:
は今2つの結果の違いを確認してください。前のid値は、オブジェクトをピックしてからid値がゼロになった後にnilになります。私は対象を何も変更していない。 NSUserdefaultsに保存して、逆に選択するだけです。これの背後にある理由は何ですか?どのように問題を克服するのですか?