NSSortDescriptor 不按字母顺序排序

NSSortDescriptor not sorting alphabetically

我有一本字典,我想根据 firstName :

按字母顺序排序
{
    id = 123;
    user =     {
        firstName = "Test 15";
        sex = Male;
    };
},
{
    id = 23;
    user =     {
        firstName = "Test 12";
        sex = Male;
    };
}

我尝试了以下代码进行排序:

NSSortDescriptor *sorter = [[NSSortDescriptor alloc]
                                         initWithKey:@"user.firstName"
                                         ascending:YES
                                         selector:@selector(localizedCaseInsensitiveCompare:)];

[arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]]

但是上面的代码好像不行。

知道哪里出了问题吗?

sortedArrayUsingDescriptors:创建一个将被排序的新数组 returns。您不会将该数组存储在任何地方。原件未受影响,您的代码将排序后的数组丢弃。

方法调用往往被命名,以便它们的名称表明它的作用。如果你想对一个数组进行排序(它需要是可变的,否则你不能对它进行排序),会有一些方法叫做 sortUsing... 类似 "sortedArrayUsing..." 显然 returns 一个新数组.您有一个数组,该方法为您提供了一个排序数组。

数组保持未排序状态,因为您没有将排序后的数组存储在任何地方。这里有一些选项

将排序后的数组保存到新数组

NSArary *sortedArray = [arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]];

将排序后的数组保存到新的可变数组

NSMutableArary *sortedArray = [[arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]] mutableCopy];

或者可能是您要查找的内容:将未排序的数组替换为已排序的数组

arrayToBeSorted = [[arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]] mutableCopy];