ページ

2008年1月1日火曜日

CoreDataで非標準データ型を扱う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Core Data Programming Guide: Non-Standard Persistent Attributes より

CoreDataのモデルは数値や文字列型を標準でサポートしているが、NSColorやオリジナルクラスなどはサポートしていない。これら非標準のデータ型を扱うには2つの方法がある。一つは2つの属性を用意する方法。これはCoreDataの標準型と非標準型の2つの属性を定義して、その間でのデータ変換をコーディングしなければならず面倒。
もう一つは NSValueTransformer を使う方法で、10.5 から導入された NSKeyedUnarchiveFromDataTransformerName を使う。

NSColor を CoreDataで保存するサンプルを作ってみた。





sample20080101.zip



ポイントは 属性のデータ型で「変換可能」(transformable)を選択すること。値変換の名前を空にしておくとデフォルトで NSKeyedUnarchiveFromDataTransformerNameが使われる。この NSValueTransformer は NSCodingプロトコルを実装したクラスのオブジェクトを自動的にオブジェクト<->NSData 間の変換を行う。これによってモデル側で使っている非標準のオブジェクトを保存時には NSData へアーカイブして保存し、読み込み時はその逆に NSDataからアンアーカイブして目的のオブジェクトに変換する。






コードはこんな感じ。