私はNSCoder
/NSKeyedArchiver
とNSKeyedUnarchiver
でシリアル化して逆シリアル化するクラスを持っています。私はシリアライズ形式(単純なアーカイブではなくアーカイブを含む)内のさまざまなエラーの処理をチェックするように設計された単体テストを持っています。NSKeyedUnarchiver unarchiveObjectWithData nilを返す
しかし、Swift 2/iOS 9にアップグレードして以来、テストでは異常な動作が表示されています。以前は無効なアーカイブのデシリアライズに失敗したため、無効なアーカイブをデシリアライズすると、Swiftがそれらをキャッチできないため、プログラムをクラッシュさせたObjective-C例外がドキュメント状態としてスローされました。これは問題ありませんが、私は将来、ある時点でテストを修正しようとしていました。
今、テストに合格します。私のランダムまたは決定論的なごみを与えられたとき、私は代わりにunarchiveObjectWithData
からnil
を受け取りました。私はこの方法のためにドキュメントをチェックしており、挙動の変更はリストされていません。
この変更は、この変更がどのように発生したのか、なぜこのような変更が発生したのかについての言及がないため、非常に疑わしいものです。私の以前失敗した単体テストは今や明らかな理由がなくなっています。
これは新しい予想される動作(nil
を返す)ですか?そうでない場合は、どのように無効なアーカイブのnil
ではなく、実際に予想される動作(Obj-C例外)を取得できますか?
ありがとうございます。私はNSKeyedArchiverを構築し、ObjC例外を手動で処理すると思いますので、この奇妙な文書化されていない半実装ステップにはありません。 – Puppy