我正在设置NSFetchedResultsController
。我的实体有一个名为“hasRight”(bool)的属性和另一个名为“sortOrder”(int)的属性。如果条目的“hasRight”为真,则还有一个sortOrder,它是一个整数,可用。另一方面,如果“hasRight”为false,则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”对我的条目进行排序,因此在“hasRight”设置为false的条目之前显示该标志设置为true的条目。然后,根据属性“sortOrder”对条目进行排序。这适用于“hasRight”设置为true的所有条目,因为每个条目都有一个唯一的“sortOrder”。
问题是“hasRight”设置为false的所有条目的“sortOrder”都为0.我在UICollectionView
中显示此Fetch的数据。会发生的情况是,每次重新加载UICollectionView
中的数据时,UICollectionView
会再次提取NSFetchedResultsController
以上并且所有带有“hasRight”false的条目都是随机排序的,因为所有条目都具有相同的值(0)表示“sortOrder”。因此,每次重新加载UICollectionView
时,所有“hasRight”设置为false的单元格都会以随机顺序重新排列。
我想要做的是仅将第二个NSSortDescriptor (sortDescriptorSortOrder)
应用于“hasRight”设置为true的所有条目。是NSFetchedResultsController
甚至是可能的,如果是的话,有人可以告诉我怎么做?
答案 0 :(得分:2)
你想要的是不可能的。但即使有可能它也无法解决您的问题。因为没有第二个sortDescriptor,hasRight == NO的对象仍然没有排序,并且将以随机方式返回。
您需要第三个sortDescriptor,使title
或creationDate
或任何对象唯一的属性。
具有hasRight = YES的对象不会受第三个sortDescriptor的影响,因为第二个sortDescriptor(sortOrder)对于每个对象已经是唯一的。
如果您没有其他唯一属性,则可以将sortOrder
用于hasRight = NO对象。因为你的第一个sortDescriptor是hasRight,所有hasRight = NO的对象仍然会出现。
例如,如果按hasRight和sortOrder
排序,则这是生成的顺序hasRight | sortOrder
YES | 1
YES | 2
YES | 3
NO | 1
NO | 2
NO | 3