2

我正在Friend从我的数据存储中拉出排序的对象,这些对象与作为驱动 a 的User一部分的给定匹配,如下所示;NSFetchedResultsControllerUICollectionView

- (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;
}

这很好用,所有朋友都按字母降序排序。

现在我想获取一个特定的朋友对象,它的名称不是按字母顺序排列的优先顺序,并将它们放在返回的所有其他朋友项目之前。在 'name' == @"SPECIFIC_NAME" 的地方为他们做一个特例。

我是否需要将此边缘情况添加到排序描述符或谓词中?你会怎么做?

谢谢

4

1 回答 1

2

听起来你需要一个又attribute一个又一个sortDescriptor

如果这friend是特别之处,请使用属性显示它isSpecial并添加为 firstsortDescriptor

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];
于 2013-06-04T10:58:39.243 回答