NSPredicate filter with NSManagedObject 的帮助程序方法



我有一个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

最新更新