具有复杂谓词的 NSFetchedResultsController

NSFetchedResultsController with complicate predicate

我正在使用 UICollectionView 开发应用程序。
它是按日期排列的事件集合。我正在使用 NSFetchedResultsController 从数据库中获取数据。但我需要获取当前和未来的事件 + 2 个过去的事件。 对于 NSFetchRequest,我使用 NSCompoundPredicate

NSPredicate *nextPredicate = [NSPredicate predicateWithFormat: @"startAt >= %@", [NSDate date]];
NSPredicate *previousPredicate = [NSPredicate predicateWithFormat:@"startAt < %@", [NSDate date]];
NSCompoundPredicate *resultPredicate = [NSCompoundPredicate andPredicateWithSubpredicates: @[nextPredicate, previuosPredicate]];
fetchRequest.predicate = resultPredicate;

而且我不知道如何限制 previousPredicate 只接收 2 件商品。

如果您知道 当前事件 的日期,那么创建一个 return 获取上次事件日期的方法,然后在主 [=] 上设置谓词12=] 到那个日期。

 -(NSDate *)dateOfPastEvent{
    NSFetchRequest *request = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:_mainContext];
    [request setEntity:entity];

    NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"startAt" ascending:NO];
    [request setSortDescriptors:@[sortDesc]];

    NSError *error = nil;
    NSArray *array = [_mainContext executeFetchRequest:request error:&error];


    __block NSDate *pastEventDate;

    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){

        if ([obj valueForKey:@"startAt"] == currentEventDate) {
            if (array.count >= idx+2) {
                pastEventDate = [[array objectAtIndex:idx+2] valueForKey:@"startAt"];
                *stop = YES;
            }

        }
    }];


    return pastEventDate;

}

现在为上面的 returned 日期设置谓词

  NSFetchRequest *requestForController = [[NSFetchRequest alloc]init];
  NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:_mainContext];
    [requestForController setEntity:entity];

  NSPredicate *predicate = [NSPredicate predicateWithFormat: @"startAt >= %@", [self dateOfPastEvent]];