2011-01-18 19 views
5

私は2つのエンティティの書籍とバンドルを持っています。 1つの本は1つ以上のバンドルには属しません。だから私はこれらのエンティティ間の双方向の多対多の関係を持っています。iPhoneのコアデータNSSetの関係

私はこの関係の値をブックパートに設定しようとしています。属性は、通常の1だった場合、私はこの本のタイトルを設定したい場合

は、私は単に

aBook.title = @"this is my title"; 

ような何かをするだろう。しかし、これは双方向対多関係であるため、コアデータはNSSet属性であると言います。

私の質問は、この属性から値を設定して読み込む方法です。

私はまずそれが普通のNSSetだと思っていました。だから、製品を読んだ後、私はシンプルで

NSSet *aSet = Book.fromBundle; 

をしましたが、私の落胆のためにASETは、だから私は、私は誤ってそれを設定していたと思ったゼロのオブジェクトに

を含んでいました。 私は

(はい、すべての変更がデータベースに保存された)以前

Book.fromBundle = [NSSet setWithObject:aBundle]; 

をやって、それを設定し、私は何かが足りないのですか?ありがとう

答えて

1

これは通常の設定ですが、コアデータは新しいセットを直接割り当てることを勧めています(このため)。カスタムクラスを使用している場合は、標準実装ではaddFromBundleObject:removeFromBundleObject:のメソッドを使用します。カスタムクラスを使用しない場合、またはこれらのメソッドを実装しない場合は、mutableSetValueForKey:メソッドを使用して変更可能なセットを取得できます。

NSMutableSet *mutableSet = [book mutableSetValueForKey:@"fromBundle"]; 
[mutableSet addObject:aBundle]; 
+0

ありがとう。アプリはもうクラッシュすることはありませんが、このコマンドを何回か使って本に別のバンドルを追加した後、最後のものを保存します。私は外部アプリケーションでデータベースを検査しました。なぜなら、バンドルオブジェクトがfromBundle上にあるかどうかをチェックして調べるために、述語を作成する方法をまだ分かっていないからです。あまりにも多くの関係では、私は[NSPredicate predicateWithFormat:@ "(fromBundle ==%@)"、aBundle]を使用しますが、NSSetでこれを行う方法はありません...もし、私は感謝します(あまりにも多くを求めていない場合)...:D – SpaceDog

+0

一対多の関係は基本的に多対多の関係と同じです。両方ともNSSetsとして表されます。唯一の違いは、逆関係がどのように設定されるかです。 1対多の関係で同じことをすることができるはずです。 – ughoavgfhw

+0

ありがとう!!!!!!!!!!!! – SpaceDog

関連する問題