在我的应用中,我有3个相关的实体。运动员、运动和运动分数。
运动员与运动之间存在着一种多对多的关系。与之相反的是whosExercise。锻炼与锻炼分数之间存在着一对多的关系。与之相反的是whichExercise。
我想执行一个fetch请求,其中我获得了运动员的所有运动分数。我怎么才能得到它呢?我是否需要运动员和运动分数之间的另一种关系,或者这是多余的?如果是,我将如何使用exercise作为我的请求的谓词?
发布于 2013-12-06 12:25:54
如果运动与运动员有关,那么你应该能够这样做:
[NSPredicate predicateWithFormat:@"SELF.athlete = @%", currentAthlete];然后:
[Exercise fetchByPredicate:currentAthletePredicate];应该是这样的。
发布于 2013-12-06 13:59:34
如果我理解清楚,您需要为运动员选择所有ExerciseScore,但运动员与ExerciseScore表没有直接关系。
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数组现在包含特定Athlete.的所有ExerciseScore对象
发布于 2013-12-06 16:06:13
谓词可以有关键路径:
@"whichExercise.whosExercise = %@",athlete或者,如果你已经有了运动员,不要做fetch请求,只需通过关系属性获得分数。
https://stackoverflow.com/questions/20415459
复制相似问题