我的应用通过归档具有属性的类的实例将设置保存到iOS设备上的文件。该类使用NSCoding协议,因此,我使用encodeWithCoder对这些属性进行编码。然后,我尝试使用诸如tempInt = decoder.decodeIntegerForKey("profileFlags") as Int
如何从decodeIntegerForKey而不是0获得可选项?
这样的命令将这些文件读回到内存中,目前为止这种方法运行良好,但现在我需要能够存储其他属性并检索它们。本质上,这个存档对象的结构正在改变,但用户已经拥有旧结构的文件(属性更少)。如果用户具有新结构的文件(附加属性),那么我想阅读它们。如果不是,我希望能够执行代码来处理它并提供默认值。
我尝试使用不存在的键tempInt = decoder.decodeIntegerForKey("nonExistentKey") as Int
,希望得到一个零值,但它返回一个零。不幸的是,这是我真的需要一个可选的地方,因为0是一个有效的值。
我能找到的最近的帮助文章是Swift: decodeObjectForKey crashes if key doesn't exist,但这似乎并不适用于此。这看起来像decodeObjectForKey返回一个可选的和decodeIntegerForKey返回一个Integer。
有关如何做到这一点的任何想法?
“如果编码的整数不适合默认的整数大小,则该方法产生一个NSRangeException。不幸的是,在Swift中很难处理这个问题。 – jtbandes