NSKeyedUnarchiverでデシリアライズしようとしたら落ちる

アプリ内に保存したデータをデシリアライズする際に、以下エラーが発生し、デシリアライズできなかった。

[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (MyApp.Fund) for key (NS.objects); the class may be defined in source code or a library that is not linked’
※MyAppはアプリ名。

結局、シリアライズしたときと、デシリアライズしたときで、Pruduct Module Nameが変わってしまったのが原因だった。
なぜ変わってしまったかというと、アプリのTARGETSを追加したからだ。
NSKeyedArchiverは、シリアライズする際に、おそらくPruduct Module Nameを使用していて、それがデフォルトだと、XcodeのBuild Settingsで、${TARGET_NAME}に設定されているから、Pruduct Module Nameが変わってしまい、今回のエラーが起こる原因となった。

今回の対応としては、Pruduct Module Nameを合わせることはせずに、前の名前でデータを保存していたアプリは削除して、再度やり直した。
運用中にTARGET_NAMEを変えることは考えていないので。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

メインはWeb系エンジニアです。

コメント

コメントする

目次