0

假设我有 2 个实体——运动员:带有“全名”属性——评估:带有“pullups”属性——我想为每个名字设置多个评估,但是我如何告诉它我想要哪个名字将特定的评估添加到?

我的应用程序与 iOS 预装的联系人应用程序非常相似。根视图控制器有我的第一个实体,运动员。这是一个显示所有运动员的表格视图。当您选择一名运动员时,它会显示他/她的所有信息,并且有一个名为 show eval 的按钮。Eval 是我的第二个实体。Athlete 与 Eval 是一对多的关系,这意味着一个运动员可以有多个 eval,但 eval 只能有一个运动员。我知道如何添加评估,但是当我添加它们时,它们就在那里,他们没有所有者,所以无论我选择哪个运动员,它都只会显示所有评估。如何创建与所选运动员相关的评估?

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];
}

视图控制器如下,所有运动员的tableview都是root tableviewcontroller,然后有一个add barbuttonitem可以让你添加运动员。它重新加载视图,然后在 tableview 上你有你新添加的运动员,你点击他,然后它显示细节,加上一个按钮来查看他的 evals。从那里,它是另一个带有 barbuttonitem 的 eval 表视图用于添加。问题是,我不知道如何告诉刚刚添加的 eval 它的所有者是谁。

4

3 回答 3

1

添加新 eval 时:创建新的 eval 实体并根据需要设置实体属性。选择与 eval 和 call 一起使用的运动员,addEval:将两者联系在一起。

当尝试获取运动员使用的所有评估时athlete.evals,它只会为您提供附加到相关运动员的评估实体。

于 2013-08-13T23:01:41.413 回答
1

您的 fetch 请求有一个 sot 顺序和一个实体描述,但是您错过了它可以使用的第三个项目。

如果您只想过滤适用于运动员的 eval,则需要在 fetchrequest 上设置谓词。

于 2013-08-13T22:24:58.800 回答
0

当用户选择查看运动员的评估时,您需要将该运动员传递给评估视图控制器。视图控制器现在可以在获取要显示的 eval 时在过滤谓词中使用它,并在创建新 eval 时配置对象之间的链接。


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