【发布时间】:2014-01-03 11:29:35
【问题描述】:
我正在设置NSFetchedResultsController。我的实体有一个名为“hasRight”(bool)的属性和另一个名为“sortOrder”(int)的属性。如果条目的“hasRight”为真,则还有一个 sortOrder,它是一个整数,可用。另一方面,如果“hasRight”为假,则 sortOrder 始终为 0(零)。目前我的代码如下所示:
- (NSFetchedResultsController *)setupFetchedResultsController:(JournalCategory*) journalCategory
{
NSManagedObjectContext *managedObjectContext = [[ConfigurationManager sharedInstance] mainManagedObjectContext];
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"Journal" inManagedObjectContext:managedObjectContext]];
NSSortDescriptor *sortDescriptorHasRight = [[NSSortDescriptor alloc] initWithKey:@"hasRight" ascending:NO];
NSSortDescriptor *sortDescriptorSortOrder = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
[fetch setSortDescriptors:[NSArray sortDescriptorHasRight, sortDescriptorSortOrder, nil]];
predicate = [NSPredicate predicateWithFormat:@"journalCategory == %@", journalCategory];
[fetch setPredicate:predicate];
return [[NSFetchedResultsController alloc] initWithFetchRequest:fetch managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
}
此代码根据“hasRight”对我的条目进行排序,因此该标志设置为 true 的条目显示在“hasRight”设置为 false 的条目之前。之后,根据属性“sortOrder”对条目进行排序。这适用于所有“hasRight”设置为 true 的条目,因为每个条目都有一个唯一的“sortOrder”。
问题是“hasRight”设置为 false 的所有条目的“sortOrder”为 0。我在 UICollectionView 中显示此 Fetch 的数据。发生的情况是,每次重新加载 UICollectionView 中的数据时,UICollectionView 再次获取高于 NSFetchedResultsController 并且所有“hasRight”为假的条目都被随机排序,因为所有条目对于“sortOrder”具有相同的值(0) ”。因此,每次重新加载UICollectionView 时,所有“hasRight”设置为 false 的单元格都会以随机顺序重新排列。
我想做的是将第二个NSSortDescriptor (sortDescriptorSortOrder) 仅应用于“hasRight”设置为 true 的所有条目。 NSFetchedResultsController 甚至可以做到这一点,如果可以,谁能告诉我怎么做?
【问题讨论】:
标签: objective-c core-data nspredicate nsfetchedresultscontroller nssortdescriptor