每个Section的NSFetchedResultsController setLimit

时间:2012-06-01 14:02:33

标签: iphone uitableview core-data nsfetchedresultscontroller

如何在由NSFetchedResultsController控制的tableview中设置每个部分的限制?例如:我有一堆节目,每个节目都有开始日期,并在不同的舞台上播放。我希望能够只显示每个阶段的下一个人。所以我不需要限制整个请求,而是限制每个部分。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Event"];    

NSMutableArray *predicates = [NSMutableArray array];
[predicates addObject:[NSPredicate predicateWithFormat:@"startDate > %@", [NSDate date]]];    
request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
NSSortDescriptor *stageSort = [[NSSortDescriptor alloc] initWithKey:@"stage.id" ascending:YES];
NSSortDescriptor *dateSort = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:stageSort, dateSort, nil];
[request setSortDescriptors:sortDescriptors];

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:self.managedObjectContext
                                                                      sectionNameKeyPath:@"stage.id"
                                                                               cacheName:nil];    

如果我在tableview委托方法中限制它,但是当fetch更改并且它试图更新表时经常崩溃,这种方法是有效的。我认为这是因为NSFetchedResultsController中的对象比显示的要多得多,而更改这些对象的动画会破坏它。

我如何设置每个部分更有效的限制?我只想要每个部分的第一个结果。

1 个答案:

答案 0 :(得分:1)

总的来说,我认为您的方法是可行的。

只需修复表更新例程即可。在插入行之前,请检查逻辑是否应该完成,如果没有,请跳过插入。