iphone - 使用 NSSortDescriptor 时,您可以使用 NSPredicate 将获取的项目放在所有其他项目之前吗

标签 iphone ios core-data

我正在拉排序 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/

相关文章:

core-data - 使用SwiftUI、Core Data、一对多关系,为什么在Many端添加一行时列表没有更新

sorting - CoreData 维护关系顺序

iphone - 等效于 html5 canvas 的 iphone 和 android 的 native 应用程序 API 是什么?

iphone - 将数据保存到另一个数组,内存管理,Objective C

ios - 将 Foo<Bar> 转换为 Foo<AnyObject> ,反之亦然

ios - 由于 "Elaborated type refers to a typedef"错误,Project-Swift.h 文件编译失败

ios - UITableViewCell : Allowing Selective Deletion

iphone - 如何验证在iPhone应用程序中输入的帐户(例如Apple ID)用户?

ios - 如何根据滑出菜单导航到不同的 View Controller

ios - 检索核心数据实体中的最后一行/对象作为字符串