読者です 読者をやめる 読者になる 読者になる

しょぼしょぼプログラマ雑記

自分のための備忘録。 開発記録など掲載してます。 質問・ご意見・ご感想等はTwitter ( https://twitter.com/yun_hokuto ) までお気軽にどうぞ。

NSUserDefaultsに自作クラスを格納する方法

iOS iPhone iPad

自作クラスを格納しようとしたところ、NSUserDefaultsは決められた型のデータしか格納できない模様・・・。

(格納しようとしたらビルドは通りますが「Attempt to set a non-property-list object as an NSUserDefaults value for key」が出てプログラムが停止しました)

というわけで、調べてみたら下記のような記事が出てきました。

プログラムは簡単なものですが、説明させていただくと

1.自作クラスに NSCodingクラス を継承させる

  1. NSCodingクラスに必要なメソッド2つを作成し、使用するプロパティを初期化・取得するように記述する (NSIntegerやBOOL、Floatなども設定可能で、それぞれ「encodeInteger」「encodeBool」「encodeFloat」を使用することで設定できる)

3.UserDefaultsに設定する際に NSKeyedArchiver の archivedDataWithRootObject を使用してアーカイブ化する

4.UserDetaulsから取得する際には NSKeyedUnarchiver の unarchiveObjectWithData を使用してアーカイブから戻された自作クラスを使用する

こんな流れっぽいです

いろいろ便利!!!