2

我想使用NSSortDescriptor.

这是我的代码

 NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"filename"  ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
[arrDocuments sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];

我得到的是这个不正确的结果。

  1. 新建文件夹 1
  2. 新建文件夹 11
  3. 新建文件夹 12
  4. 新建文件夹 2

预期的

  1. 新建文件夹 1
  2. 新建文件夹 2
  3. 新建文件夹 11
  4. 新建文件夹 12
4

1 回答 1

8

该功能localizedCaseInsensitiveCompare:是字母搜索。

你会更好地使用像...这样的功能

compare:options:

使用这些选项,NSNumericSearch这会将任何数字视为数字,因此将它们排序为 1、2、10 等...

虽然 10 按字母顺序排列在 2 之前,但因此您的问题。

整个代码看起来像......

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"fileName" ascending:YES comparator:^(NSString *obj1, NSString *obj2) {

    return [obj1 compare:obj2 options:NSNumericSearch | NSCaseInsensitiveSearch];

}];

[arrDocuments sortUsingDescriptors:@[sd]];
于 2013-07-18T09:22:35.620 回答