Stringにインスタンス変数名があります
var name: String
私のクラスはNSCodingプロトコルを実装しています。だから名前のために
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.name, forKey: kName)
}
required init(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObjectForKey(kName) as String // CRASH HERE
}
結果?デコーダーでの開始中にランタイムクラッシュが発生しました。 initをこれに変更しました:
var temp = aDecoder.decodeObjectForKey(kName) as NSString!
self.name = aDecoder.decodeObjectForKey(kName) as String
値tempが正しいNSString値を保持していることに気付きました。だから私は以下の行がそれを修正しようとしていると思ったが、リンカーエラーを発行する:
self.name = aDecoder.decodeObjectForKey(kName) as NSString!
質問は、どのように臨時雇用者を取得し、名前に入れるかです。
動作させるために必要なことが2つありました。
何らかの理由で、NSStringとStringの間のブリッジングはこの状況では機能しません。キャストは2段階で行う必要があります
if let name = aDecoder.decodeObjectForKey(kName) as? NSString {
self.name = name as String
} else {
assert(false, "ERROR: could not decode")
self.name = "ERROR"
}