0

2 つのエンティティがあるとしましょう -- Athlete: with "fullname" 属性 -- Eval: with "pullups" 属性 -- 名前ごとに複数の eval を設定したいのですが、希望する名前をどのように伝えるか特定の評価を追加するには?

私のアプリは、iOS にプリインストールされている連絡先アプリとよく似ています。ルート ビュー コントローラーには、最初のエンティティである Athlete があります。すべてのアスリートを表示するテーブル ビューです。アスリートを選択すると、彼/彼女のすべての情報が表示され、show eval というボタンがあります。Eval は私の 2 番目のエンティティです。Athlete は Eval と対多の関係にあります。つまり、1 人のアスリートは複数の eval を持つことができますが、eval は 1 つのアスリートしか持つことができません。評価を追加する方法は知っていますが、それらを追加すると、所有者がいないため、選択したアスリートに関係なく、すべての評価が表示されます。選択されたアスリートに関連する評価を作成するにはどうすればよいですか?

allevals.h

//the athlete selected pushes a tableviewcontroller with all evals, but I want it to only show evals for the athlete selected.
-(void)viewWillAppear:(BOOL)animated{
    self.title = [NSString stringWithFormat:@"%@'s Evaluations",_athletesFullName];

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    _managedObjectContext = [appDelegate managedObjectContext];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *eval = [NSEntityDescription entityForName:@"Eval" inManagedObjectContext:_managedObjectContext];
    [request setEntity:eval];
    NSSortDescriptor *sortDescriptor =
    [[NSSortDescriptor alloc] initWithKey:@"date_recorded"
                                ascending:NO
                                 selector:@selector(localizedCaseInsensitiveCompare:)];
    NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil){
        //handle error
    }
    [self setEvalArray:mutableFetchResults];
    [self.tableView reloadData];
}

ビュー コントローラは次のとおりです。すべてのアスリート テーブルビューがルート テーブルビュー コントローラーであり、アスリートを追加できる add barbuttonitem があります。ビューをリロードし、テーブルビューに新しく追加されたアスリートを表示します。彼をクリックすると、詳細が表示され、評価を見るためのボタンが表示されます。そこから、追加用の barbuttonitem を含む評価の別のテーブルビューです。問題は、追加されたばかりの eval にその所有者が誰であるかを伝える方法がわからないことです。

4

3 に答える 3

1

新しい eval を追加する場合: 新しい eval エンティティを作成し、必要に応じてエンティティ属性を設定します。eval に参加するアスリートを選択しaddEval:、2 つをリンクする呼び出しを行います。

アスリート用のすべての eval を取得しようとするとathlete.evals、問題のアスリートに関連付けられた eval エンティティが表示されます。

于 2013-08-13T23:01:41.413 に答える
1

フェッチ リクエストには SOT オーダーとエンティティの説明がありますが、処理できる 3 番目の項目がありません。

アスリートに適用される評価のみをフィルタリングする場合は、fetchrequest に述語を設定する必要があります。

于 2013-08-13T22:24:58.800 に答える
0

ユーザーがアスリートの評価を表示することを選択した場合、そのアスリートを評価ビュー コントローラーに渡す必要があります。ビュー コントローラーは、表示する eval を取得するときのフィルター述語と、新しい eval が作成されるときのオブジェクト間のリンクの構成の両方で使用できるようになりました。


newEval.whoTook = self.currentAthlete;
于 2013-08-13T22:36:50.910 に答える