在我的核心数据模型中,我有一个实体Session和Exercise。
Session与Exercise有很多关系(也有一对一的反向关系)。
在我的fetch中,我试图找到与当前练习相关的所有Session对象。
我正在使用以下不起作用的代码。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat: @"exercise = %@", exercise.name]];
NSEntityDescription *sessionEntity = [NSEntityDescription entityForName:@"Session" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:sessionEntity];
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"Fetch error: %@", error);
self.sessionArray = results;
这是我的数据模型:
答案 0 :(得分:0)
在谓词中使用=,==是比较运算符。我认为那是你出错的地方。
答案 1 :(得分:0)
首先,从截图中看来,Session实体的关系属性似乎是exercises
而不是exercise
。
此外,在我看来,如果您搜索的不是Session实体而是搜索练习实体,然后遍历生成的数组以提取会话,那么它会起作用。
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:"name == %@", exerciseName]];
NSEntityDescription *exerciseEntity = [NSEntityDescription entityForName:@"Exercise" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:exerciseEntity];
...
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
...
NSMutableArray *mutableSessionArray = [NSMutableArray array];
for (Exercise *ex in results) {
Session *session = [ex exercises];
if (session) [mutableSessionArray addObject:session];
}
self.sessionArray = [NSArray arrayWithArray:mutableSessionArray];
为清楚起见,名为exercises
的练习实体的关系可称为session
。我建议重命名它。
顺便说一句,你也可以写=
代替==
,据我所知,它们是等价的。在Predicate Programming Guide section on Predicate Format String Syntax中它说:
=, == The left-hand expression is equal to the right-hand expression.