解码不匹配的数据类型时应用程序崩溃:如何在使用NSCoding解码之前验证类型?

时间:2017-06-11 19:25:00

标签: ios swift nsuserdefaults nscoding

如果使用错误的NSCoding函数解码数据类型,则应用程序崩溃。例如,如果DoubleKey实际上表示decodeInteger所期望的双倍而不是整数,则此行将崩溃:

    let isReallyDouble = aDecoder.decodeInteger(forKey: DoubleKey)

如何在解码前验证数据类型?如果应用程序的版本1将某个值编码为整数,但版本5必须将该变量更改为double,这一点很重要。

这适用于Swift 3,其中decodeObject不适用于整数和双精度等值类型:Swift 3 saving and retrieving custom object from userDefaults

导致崩溃,而不是返回nil,当数据类型不匹配时,似乎是一个非常糟糕的设计选择。

1 个答案:

答案 0 :(得分:1)

Apple在2018年的WWDC上进行了名为“您可以信任的数据”的演讲。主题之一讨论了NSCodeable对象的解码。请参阅下面的链接以访问演讲。强烈推荐。

https://developer.apple.com/videos/play/wwdc2018/222/