これは、Swift 2 で a でアーカイブされた NSData blob が Swift 3 で a で開かれた場合に、Swift 2 から Swift 3 への更新境界でのみ発生するようNSKeyedArchiver
ですNSKeyedUnarchiver
。3、それらは rawおよび型としてエンコードされます。次のテストがこの主張を裏付けていると思います。Bool
Int
NSNumber
Bool
Int
これは Swift 3 で機能し、Swift 2 でエンコードされた a を解凍しますが、Bool が Swift 3 でエンコードされた場合はBool
戻ります。nil
let visible = aDecoder.decodeObject(forKey: "visible") as? Bool
これは、Swift 3 でBool
エンコードされた a を展開するために Swift 3 で機能しますが、Bool が Swift 2 でエンコードされた場合はクラッシュします。
let visible = aDecoder.decodeBool(forKey: "visible")
私の解決策は次のとおりです。
let visible = aDecoder.decodeObject(forKey: "visible") as? Bool ?? aDecoder.decodeBool(forKey: "visible")