NSKeyedUnarchiverしたいときに実行時に落ちてしまい躓いたので自分用に備忘録に残しておく
躓いたケース
NSKeyedArchiverを未実行NSData型のデータに対してNSKeyedUnarchiverを実行すると落ちた。
対処法
圧縮済み・未圧縮の判定をオプショナルバインディングを使って行う。
理由
下記コードは落ちる問題を解決した例
Swift2_3ver.swift
func excuteHogeWithData(NSData: Data)
{
if let extractedData = NSKeyedUnarchiver.unarchiveObjectWithData(data)
{
// 引数に対してNSKeyedArchiver実行済みの場合
}
else
{
// 引数に対してNSKeyedArchiver未実行の場合
}
}
Swift3_ver.swift
func excuteHogeWithData(data: Data)
{
if let extractedData = NSKeyedUnarchiver.unarchiveObject(with: data)
{
// 引数が NSKeyedArchiver で圧縮されたのデータの場合
}
else
{
// 引数が NSKeyedArchiver で圧縮されたデータでない場合
}
}
追記 2017/5/24
・Swift2.3で開発をしていたため、Swift3系の実装法が未記載でした。
・このケースではオプショナルバインディングが使えることを考慮していなかったため記事を修正しました。