我有一个UITable视图,其中包含一个名为Assignment的NSManagedObjects列表。我使用NSPredicate来过滤列表。我正在过滤一个球员今天和昨天应该显示的分配:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"player == %@ AND (day == %@ OR day == %@)",
player,
[NSNumber numberWithInt:[self todaysDayNumber]],
[NSNumber numberWithInt:[self yesterdaysDayNumber]]];
我需要添加一个额外的过滤级别。我想过滤掉的任务,应该只显示两周一次。所以我给赋值添加了这个方法:
-(BOOL)thisWeeks{
//If this is a weekly assigment
if ([self.weekly boolValue]) {
return YES;
}
//Determine the week number
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSWeekCalendarUnit;
NSDateComponents *dateComponents = [calendar components:unitFlags
fromDate:[NSDate date]];
NSUInteger week = [dateComponents week];
//Assigned week even?
if ([self.weekNumber intValue] % 2){
//Current week even?
if (week % 2) {
return YES;
}
}
//Assigned week odd?
if (!week % 2) {
//Current week odd?
if (![self.weekNumber intValue] % 2){
return YES;
}
}
//Should not be shown this week.
return NO;
}
是否可以使用这个辅助方法"thisWeeks"作为NSPredicate中的过滤器?
如果我"做错了",我可以手动过滤获取的结果,但我不确定如何把结果放回NSFetchedResultsController,这样我的UITable视图可以继续使用NSFetchedResultsController。
NSPredicate也接受块作为谓词。下面是第一个检入thisWeeks:
的例子NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bind) {
return [self.weekly boolValue];
}];
现在你可以实现方法- (BOOL)thisWeeksWithObject:(id)object并写如下:
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bind) {
return [self thisWeeksWithObject:obj];
}];
当然,你必须把方法中的self改为object。