在我的应用程序中,我有3个相关实体。运动员,运动和运动成绩。
运动员与运动有很多关系。它的反面是whosExercise。 运动与运动得分有很多关系。它的反面是哪个锻炼。
我想执行一个获取请求,我可以获得运动员的所有运动成绩。我怎么会这样?我需要运动员和运动成绩之间的另一种关系,还是多余的?如果是,我如何使用运动作为我的请求的谓词?
答案 0 :(得分:0)
如果练习与运动员有关系,那么你应该能够做到这样的事情:
[NSPredicate predicateWithFormat:@"SELF.athlete = @%", currentAthlete];
然后只是:
[Exercise fetchByPredicate:currentAthletePredicate];
应该是它。
答案 1 :(得分:0)
如果我清楚地了解,您需要为运动员选择所有运动分数,但运动员与运动分数表没有直接关系。
SLQ查询可能如下所示:
Select *
from ExerciseScore
where IDScore in (select IDScore
from Exercise
where IDExercise in ( select IDExercise
from Athlete
)
)
但在Core Data中,您无法操作SLQ查询。 尝试这种方法。
1.为运动员取得所有运动:
NSError *error;
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Exercise"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.athlete = @%", currentAthlete];
request.predicate=predicate;
NSArray *athleteExercises = [self.managedObjectContext executeFetchRequest:request error:&error];
2.在整个练习中进行迭代,以获得每个练习的所有练习分数。
NSMutableArray *allScores = [NSMutableArray arrayWithCapacity:0];;
for (Exercise *exercise in athleteExercises) {
if ([exercise.scores count]>0) {
[allScores addObjectsFromArray:[exercise.scores allObjects]; //exercise.scores must be NSSet type
}
}
allScores
数组现在包含特定ExerciseScore
Athlete.
个对象
答案 2 :(得分:0)
谓词可以有关键路径:
@"whichExercise.whosExercise = %@",athlete
或者,如果您已经拥有运动员,请不要执行获取请求,只需通过关系属性获取分数。