我正在尝试正确NSFetchedRequest
查询给定电视节目的下一个未观看的剧集。它应该放在一个请求中,因为我必须将它交给 NSFetchedResultsController。
My Model (CoreData):
Show
- Seasons:NSSet<Show>
Season
- Episodes:NSSet<Episode>
Episode
- first_aired:NSDate
- watched:BOOL
每个节目都应该返回 1(或 0)集。
我可以将它与多个请求放在一起。
例如:我将NSFetchedResultsController
up 设置为获取每个show
. 在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我迭代每一个Show
以获得最新的episode
+(Episode *)nextAiringEpisodeForShow:(Show *)show{
NSTimeInterval timeinterval = 0.0;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeinterval];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Episode"];
request.predicate = [NSPredicate predicateWithFormat:@"season.show = %@ AND watched = false AND season.seasonNumber > 0 AND first_aired > %@",show,date];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"first_aired" ascending:NO];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
return [[show.managedObjectContext executeFetchRequest:request error:nil] lastObject];
}
这样做的问题是:有些节目已经看过所有剧集。这些将显示为(null)
,UITableView
并且无法从 中删除它们,UITableView
因为NSFetchedResultsController
设置为dataSource
。此外,以这种方式进行排序TableView
时无法排序first_aired
。还是我在这里遗漏了什么?!