5

わかりました、私はまだiOSにかなり慣れていないので、いくつかのことについて混乱しています. まず、ここに私のエンティティがあります... ERD

私がすでにそこに持っているのは、フルーツ (アップル) とソース (ツリー) です。どちらもデータベースに保存されます。

次にオレンジを追加したいのですが、「木」と関係があります。これは私が使用しているものです:

    Fruit *fruit = (Fruit *)[NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:managedObjectContext];
    fruit.fruitName = @"Orange";
  NSSet *test = [NSSet setWithObject:fruit];
    [_source addSourceFruit:test];

NSLog(@"4");

fruit.fruitSource = _source;

(_source は「ツリー」です。ソース エンティティで「ツリー」のフェッチ リクエストを配列に実行し、objectAtIndex:0 (ツリー) を取得して、ソース エンティティへのポイントに割り当てました。

   data = [managedObjectContext executeFetchRequest:request error:&error];


   Source *_source = [data objectAtIndex:0];

およびアクセサ メソッド:

- (void)addSourceFruitObject:(Fruit *)value;
- (void)removeSourceFruitObject:(Fruit *)value;
- (void)addSourceFruit:(NSSet *)values;
- (void)removeSourceFruit:(NSSet *)values;

バンドルに関する回答を見つけましたが、完全にはわかりません。この「 https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html」と「https://developer.apple.com/library/mac/ 」を読みました#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html 'しかし、私はそれを見事に把握していないようです.

編集:エラーは

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'
*** First throw call stack:
4

1 に答える 1

3

sourceFruitセットを置き換えることでコアデータを混乱させていると思います。CoreDataは逆の関係を維持します。つまりfruit.fruitSource = _source;、オブジェクトがどのように接続されるかを理解するには、設定するだけで済みます。[_source addSourceFruitObject:fruit]; 代わりに使用することもできますが、それは私にはそれほど簡潔ではないようです。

(余談ですが_name、ローカル変数の命名スタイルを使用しないことをお勧めします。プロパティをバックアップするインスタンス変数にそのフォームを使用することは、標準のようなものになっています。)

于 2012-12-10T13:01:58.063 に答える