我正在拉排序 Friend
我的数据存储中与给定 User
匹配的对象作为 NSFetchedResultsController
的一部分驱动UICollectionView
如下图;
- (NSFetchedResultsController *)fetchedFriendsResultsController
{
if (_fetchedFriendsResultsController != nil) {
return _fetchedFriendsResultsController;
}
//Get the correct array of friends for that user
NSFetchRequest *fetchRequestItems = [[NSFetchRequest alloc] init];
NSEntityDescription *entityItem = [NSEntityDescription entityForName:@"Friend" inManagedObjectContext:self.managedObjectContext];
[fetchRequestItems setEntity:entityItem];
User* myUser = [DataBaseManager getCurrentUser:managedObjectContext];
[fetchRequestItems setPredicate:[NSPredicate predicateWithFormat:@"user == %@", myUser]];
//Sort by name descending
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequestItems setSortDescriptors:sortDescriptors];
NSFetchedResultsController *fetchedItemsResultsController =[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestItems managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
_fetchedFriendsResultsController = fetchedItemsResultsController;
return _fetchedFriendsResultsController;
}
这工作正常,所有 friend 都按字母降序排序。
现在我想获取一个特定的好友对象,该对象的名称按优先级顺序不是按字母顺序排列在前面,并将它们放在返回的所有其他好友项目之前。为它们创建一个特殊情况,其中 'name' == @"SPECIFIC_NAME"。
我是否需要将此边缘情况添加到排序描述符或谓词中?你会怎么做?
谢谢
最佳答案
听起来您需要进一步的属性
和进一步的sortDescriptor
。
如果这个 friend
很特别,请使用isSpecial
之类的属性来显示它,并添加为第一个sortDescriptor
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"isSpecial" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil];
[fetchRequestItems setSortDescriptors:sortDescriptors];
关于iphone - 使用 NSSortDescriptor 时,您可以使用 NSPredicate 将获取的项目放在所有其他项目之前吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16915940/