我怀疑,Core Data 在创建原始数据库调用时可以合并类别。
为您的案例创建 2 个日期,一个是今年 1 月 1 日 0:00,一年后
NSString *basePredicateString = @"creationDate >= %@ AND creationDate < %@";
NSPredicate *predicate = [NSPredicate predicateWithFormat:basePredicateString, startDate, endDate];
为了完整起见——我将如何生成实际年份的开始和结束日期:
NSDate *startDate = [NSDate date];
[[NSCalendar currentCalendar] rangeOfUnit:NSYearCalendarUnit startDate:&startDate interval:NULL forDate:startDate];
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];
comps.year = 1;
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:startDate options:0];
在这个答案下面的评论中,jbrennan 提出,确实可以将一个类别合并到一个谓词中。虽然他适合作为 NSArrays 的集合(他添加了一个指向测试项目的链接),但在涉及 Core Data 获取请求时它不起作用——至少我不能让它起作用。我试过了。这是我的测试:https ://github.com/vikingosegundo/CoreDataCategoryTest