0

これはかなり時間がかかることを認識していますが、私は現在、最初のCoreDataプロジェクトに取り組んでいます。これまで私はそれを保存し、すべての大丈夫しかし、私は正常に動作するように関係を得るように見えることはできません。 私はExersizeを表示するテーブルビューを持っています。Exersize Categoryは、関連するExersizes(一対多)を表示するテーブルに移動します。CoreData:多対多関係の表示問題

は(画像を投稿しようとしましたが、私はまだ十分な担当者のポイントを持っていない)が、データモデルは、私が読んだすべてのものから、この

ExersizeCategory < --- >> Exersize

のように見えます私は述語を使用して結果をフィルタリングする必要があるかもしれないと信じていますが、実際にどのように動作しているか天気かどうかについては混乱しています。実際にはExersize CategorysとExersizesオブジェクトを作成して保存して、最初はここで

は、私が作成し、(また、テキストフィールドのエントリにその名前を設定)

ExersizeCategory *exersizeCategory = [NSEntityDescription insertNewObjectForEntityForName:@"ExersizeCategory" 
                     inManagedObjectContext:self.managedObjectContext]; 
    exersizeCategory.name = self.textField.text; 

    [self.managedObjectContext save:nil]; // write to database 

を保存しています方法ですそして、ここで(ほとんど同じ)exersizesのコード

// Create a new instance of the entity 
    exersize = [NSEntityDescription insertNewObjectForEntityForName:@"Exersize" 
              inManagedObjectContext:self.managedObjectContext]; 

    exersize.name = self.textField.text; 

    [self.managedObjectContext save:nil]; // write to database 

が、ありますこれは、オブジェクトを作成するには、私はまだcoreDataGeneratedAccessorsを実装するために持っているtableviewsでそれらを見て、どのようにそれらの画像に収まるのですか?

@interface ExersizeCategory (CoreDataGeneratedAccessors) 
  • (無効)addExersizesObject:(Exersize *)の値。
  • (void)removeExersizesObject:(Exersize *)value;
  • (void)addExersizes:(NSSet *)values;
  • (void)removeExersizes:(NSSet *)values;

私は(私はwww.timroadly.comで通過してたチュートリアルを見つける)あなたが取得するために記述する必要があるコードの量を減らすように思わCoreDataTableViewControllerクラスを使用していることを言及する必要があります作成スタンフォード大学。 side-note:これをサブクラス化せず、スタンダードに気づいたように標準的な方法を使用する方がよいでしょうか?スタンフォードに著作権があると言いますので、公開したいアプリで使用できるかどうかは分かりません。 ?ここで

は、私は現在、私はこれを実現する際に重要な部分を見逃している知っているExersizes

- (void)setupFetchedResultsController { 
// 1 - Decide what Entity you want 
NSString *entityName = @"Exersize"; // Put your entity name here 
NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName); 

// 2 - Request that Entity 
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName]; 

// 3 - Filter it if you want 

//currently unsure about this! 
//request.predicate = [NSPredicate predicateWithFormat:@""]; 

// 4 - Sort it if you want 
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" 
                       ascending:YES 
                        selector:@selector(localizedCaseInsensitiveCompare:)]]; 
// 5 - Fetch it 
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                    managedObjectContext:self.managedObjectContext 
                     sectionNameKeyPath:nil 
                       cacheName:nil]; 
[self performFetch]; 

}

を表示するためにフェッチしていますが、私はちょうどよく分からない方法ですこれは、どこで。 Iveは数日間コアデータにしかいませんでしたので、かなり勉強になりました!

光を放つことができる人/ありがとう、または正しい方向に私を押してください!

答えて

0

f。破滅、

あなたが書く:

を、これはオブジェクトを作成し、私は coreDataGeneratedAccessorsを実装するためには至っていないtableviewsに それらを見ている中で動作しているようですが、どのようにしてあるものがに収まるん の写真ですか?

コアデータは、これらのメソッドの実装を動的に作成します。ヘッダーはあなたの便利さとコンパイラのタイプチェックのためのものです。ここで

はあなたexersize実体上の権利行使名前を見つけるために、単純な述語です:

NSPredicate *p = [NSPredicate predicateWithFormat: @"%K == %@", @"name", @"Push Up"]; 

アンドリュー

P.S.あなたは、運動という言葉の綴りを訂正したいかもしれません。

+0

こんにちはアンドリューはスペルをよく叫んでいますが、一貫性のためにちょうど同じように保ちます。いくつかのことを読んでもう少し読んだ後、私は正しくフェッチしていると信じていますが、exersizeオブジェクトを作成しているときは、exersizeのNSSet数が0のままであるため、関係に配置できないようです。試みました[exersizeCategory addExersizesObject:exersize];しかし、それは動作していないようですか?私は見つけることができるすべての解決策を試しましたが、私はまだどこかで間違っています。何かが明らかに間違っているようですか?もう一度ありがとう –

+0

f.perdition、すべてのCDの関係は逆です。したがって、関係が1対多であり、逆数が1対1である場合、単純な割り当てによって関係を構築することができる。次のように: 'exercise.exercises = exercises;' Andrew – adonoho

+0

Andrew、私は前と同じ問題を起こすようには思えません。 exerciseCategoryオブジェクトはフェッチされ作成されていますが、演習自体はarntである必要があります。 printステートメントを通して私は管理されたオブジェクトのコンテキストが渡されて何かが作成されていることがわかりますがNSSetは空のままですし、tableviewもそうですが、そのエントリを取得していて、取ってくる。何が起こっているのでしょうか?私はそれが状況を助ける場合は、より多くのコードを表示するために自分の投稿を更新することができますか?元気いっぱい! –