ios - NSPredicate 不会工作?

标签 ios objective-c cocoa-touch core-data

我有两个实体之间的一对多关系。运动员(评估)<-->>评估(whosEval)。我试图只显示被选中的运动员的评价。但是,当我尝试通过 eval.whosEval 访问关系时,出现未定义的错误。当我运行该应用程序时,该表是空的,而如果我注释掉谓词,它会显示所有运动员的所有评估。我错过了什么吗?谢谢。

allEvals.m

    -(void)viewWillAppear:(BOOL)animated{

    self.title = [NSString stringWithFormat:@"%@'s Evaluations",_athletesFullName];

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

    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    NSFetchRequest *athleteRequest = [[NSFetchRequest alloc] init];

    [athleteRequest setEntity:[NSEntityDescription entityForName:@"Athlete" inManagedObjectContext:_managedObjectContext]];
    NSError *athleteError = nil;
    NSArray *results = [_managedObjectContext executeFetchRequest:athleteRequest error:&athleteError];
    NSPredicate *athletePredicate = [NSPredicate predicateWithFormat:@"full == %@", _athletesFullName];
    [request setPredicate:athletePredicate];
    Athlete *currentAthlete = [results objectAtIndex:0];

   NSPredicate *predicate = [NSPredicate predicateWithFormat:@"whosEval == %@", currentAthlete];
   [request setPredicate:predicate];
    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];

    NSLog(@"Athlete's Full Name is: %@",_athletesFullName);

}

最佳答案

你的谓词在它真正应该使用运动员对象时却使用了运动员姓名:

@"whosEval == %@", self.athlete

关于ios - NSPredicate 不会工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18293447/

相关文章:

ios - 由于 ios 中未捕获的异常 'NSUnknownKeyException' 而终止应用程序

ios - ASIHTTPRequest 在委托(delegate)设置时不保存 pdf 文件

objective-c - xcode 无法隐藏 tabbarcontroller

cocoa-touch - 为 UITableView 创建阴影

objective-c - 格式化格式错误的日期的最实用方法(Objective-C,Cocoa Touch)

ios 在导航 Controller 之间传递数据

iphone - 使用 C++ 在 iOS 应用程序中找不到的文件夹中的文件

ios - 将数据传递给另一个 View Controller 不起作用

ios - 解码 Storyboard时访问错误导致崩溃

iphone - 当 UISearchDisplayController 处于非事件状态时保持搜索词可见