2009-07-09 24 views
20

コアデータモデルのエンティティの1つにNSStringのNSMutableArrayを追加します。問題は、これがコアデータでサポートされているタイプではないことです。コアデータにNSMutableArrayを保存する

私は変換可能な属性を作成しようとしましたが、問題は、NSMutableArrayをNSDataに変換してからNSDataからNSMutableArrayに戻す方法がないことです。誰かがこの問題をどのように解決できるか考えていますか?

(私は配列をアーカイブすることができますが、私はそれをしたくありません、私はそれが私のモデルに存在してほしいです)。

答えて

32

あなたは、あなたのモデル化されたオブジェクト内のバイナリデータの属性を持っているデータに配列をアーカイブし、そしてオブジェクトにそれを引き渡すことができます。

しかし、私は良い方法ではなく、直接、配列を使用しての対多の関係を、持っているだろうと思います。

****編集:ここでは、管理対象オブジェクトで使用できるようにNSDataのに配列をアーカイブする方法を説明します***

NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObjects:@"1",@"2", nil]]; 

基本的には、NSCodingプロトコルに準拠して、あなたが持っている任意のクラスこの方法でアーカイブすることができます。 NSArray/NSMutableArrayはすでにそれに準拠しています。彼らは自分のオブジェクトのすべてに自分自身をアーカイブするよう指示します。そしてそれらのオブジェクトのメンバーのすべては適合しなければなりません。それは木のようです。

あなたの配列は準拠しており、NSString(これも準拠しています)の配列なので、あなたは金色です。

+1

しかし、ここでは、単純な文字列の配列を持っている - あなたは、管理対象オブジェクトの各文字列をラップしなければならない、またはすでに利用可能NSStringの周りの薄いNSManagedObjectラッパーのいずれかの種類がありますか? –

+0

文字列の配列をデータに変換する方法は? ' – gburgoon

+9

反対は'にNSArray *配列= [arrayData NSKeyedUnarchiver unarchiveObjectWithData]である(私は私が文字列の配列を使用する必要がないかかわるこの問題の回避策を見つけましたが、私は解決策のためにまだ興味があります)方法は、別のエンティティテーブルを作成し、これらの2つのエンティティ間の関係を追加することです!私は配列をアーカイブ&unarchivingするのは時間の無駄だと思う。 – Resh32

関連する問題