在coreData xcode iphone中创建一个复合谓词

sag*_*gar 8 iphone core-data nspredicate ios

我正在研究核心数据与3个实体(班级,学生,ExamRecord)及其关系区域:

Class<------>> Students <------> ExamRecord
Run Code Online (Sandbox Code Playgroud)

我创建了一个谓词,用于获取第5课的学生列表.

NSString * fmt2 = @"studentsToClass.className=%@";
NSPredicate * p2 = [NSPredicate predicateWithFormat:fmt2,@"5th",nil];
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到了所有第5班的学生

现在我还想对学生提取的另一个过滤器.

获取考试记录"结果"为"通过"的学生.result是ExamResult实体中学生的属性

我如何在此使用复合谓词?

如果我错了,请纠正我

任何帮助将不胜感激

谢谢

Mar*_*n R 29

您可以使用复合谓词:

NSPredicate *p1 = [NSPredicate predicateWithFormat:@"studentsToClass.className = %@", @"5th"];
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"studentsToExamRecord.result = %@", @"Pass"];
NSPredicate *p = [NSCompoundPredicate andPredicateWithSubpredicates: @[p1, p2]];
Run Code Online (Sandbox Code Playgroud)

或者您只需将测试与"AND"组合:

NSPredicate *p = [NSPredicate predicateWithFormat:@"studentsToClass.className = %@ AND studentsToExamRecord.result = %@",
      @"5th", @"Pass"];
Run Code Online (Sandbox Code Playgroud)

请注意,参数列表predicateWithFormat未被nil终止.参数的数量由格式字符串中的格式说明符的数量决定.