2011-10-19 10 views
9

NSObjectを拡張するクラスがあります。それはいくつかのフロート変数で構成されています。このクラスをコアデータに保存したいと思います。CoreDataを使用してカスタムクラスを格納する方法

データモデルでは、このクラスをCoreDataを使用して格納するためにバイナリデータにすることが最も可能性が高いと思われます。

これは間違いありませんか?もしそうなら、CoreDataを使って私のクラスをどのように保存して取り出すのか教えてください。

おかげで、

答えて

0

私は、コアデータに新しいエンティティを作成する新しいエンティティにおけるそれらのフィールドをモデル化し、管理オブジェクトの新しいカスタムサブクラスを使用するようにコードをリファクタリングお勧めします。

10

カスタムオブジェクトを透過的に保存してコアデータからロードする方法は、NSValueTransformerを使用することです。あなたのクラスからNSDataへ、そしてその逆に行くことができるNSValueTransformerを作成する場合、このクラスに対応するエンティティの属性を変換可能としてマークすることができます。コアデータでは、この属性を扱うときに、このタイプのオブジェクトを設定および取得できます。

私の答えはhereです。これは、コアデータでネイティブにサポートされていないUIImage属性でこれを行う方法のコードを示しています。カスタムオブジェクトのためにこれを行うには、NSCodingに準拠させ、独自の-encodeWithCoder:-initWithCoder:のメソッドを実装して、NSDataインスタンスに格納して保存する必要があります。

アップル社には、Core Data Programming Guideの「Non-Standard Persistent Attributes」セクションに、MacのNSColorクラスを使用した例を含め、これに関する詳細が記載されています。

+0

@berylliumが推奨するようにするのが最善だと思いますが、ブラッドはそれは正しい(もちろん)。 –

0

私が最初に提案したのは、使用しているオブジェクトタイプがコアデータでサポートされているので、これらの値を格納するエンティティを作成することです。

このモデルを頻繁に変更する場合は、データ移行を処理したくない場合は、オブジェクトのプロパティをコアデータモデルの型として変換可能に設定することができます。次に、クラスがNSCodingプロトコルを実装していることを確認します。これを実行すると正常に動作します。

関連する問題