My Appは、プロパティを持つクラスのインスタンスをアーカイブすることで、設定をiOSデバイス上のファイルに保存します。クラスはNSCodingプロトコルを使用するため、これらのプロパティはencodeWithCoderを使用してエンコードします。 tempInt = decoder.decodeIntegerForKey("profileFlags") as Int
0ではなくdecodeIntegerForKeyからオプションを取得するにはどうすればよいですか?
これはうまくいきましたが、今では追加のプロパティを保存して取得できる必要があります。本質的には、このアーカイブされたオブジェクトの構造は変更されていますが、ユーザーは既に古い構造(プロパティが少ない)のファイルを既に持っています。ユーザーが新しい構造(追加のプロパティ)を持つファイルを持っている場合、それらを読みたいと思います。もしそうでなければ、それを処理してデフォルト値を提供するコードを実行できるようにしたい。
存在しないキーtempInt = decoder.decodeIntegerForKey("nonExistentKey") as Int
を使用しようとしましたが、ゼロの値を取得することを期待しましたが、ゼロを返しました。残念ながら、これは0が有効な値であるため、実際にはオプションが必要な場所です。
最も近いヘルプ記事はSwift: decodeObjectForKey crashes if key doesn't existですが、ここでは該当しないようです。 decodeObjectForKeyはオプションのものを返し、decodeIntegerForKeyはIntegerを返します。
これを行う方法に関するアイデアはありますか?あなたがdecoder.containsValueForKey("nonExistentKey")
天気をかそこに存在する実際の値であり、それはdecodeIntegerForKey
でそれを抽出している場合にのみ使用して確認することができます
"エンコードされた整数がデフォルトの整数サイズに収まらない場合、このメソッドはNSRangeExceptionを発生させます。"残念ながら、それをSwiftで処理するのは難しいです。 – jtbandes