gpt4 book ai didi

ios - 具有复杂谓词的 NSFetchedResultsController

转载 作者:行者123 更新时间:2023-11-29 12:03:54 25 4
gpt4 key购买 nike

我正在使用 UICollectionView 开发应用。
它是按日期排列的事件集合。我正在使用 NSFetchedResultsController 从数据库中获取数据。但我需要获取当前和 future 的事件 + 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 个项目。

最佳答案

如果您知道当前事件的日期,那么创建一个方法返回要获取的最后一个事件的日期,然后将主NSFetchRequest 上的谓词设置为该日期.

 -(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;

}

现在为上述返回日期设置谓词

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

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

关于ios - 具有复杂谓词的 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com