NSSortDescriptor 没有对我的 NSMutableArray 进行排序?

Posted

技术标签:

【中文标题】NSSortDescriptor 没有对我的 NSMutableArray 进行排序?【英文标题】:NSSortDescriptor not sorting my NSMutableArray? 【发布时间】:2013-09-05 00:20:16 【问题描述】:

我有一个包含 NSDictionaries 的 NSMutableArray。我发现了一个关于 SO 的问题,并且正在使用此代码对这个 NSMutableArray 进行排序:

NSMutableArray


    data =         
   etc... (for length)
    ;
    number = 1;
,

    data =         
       etc... (for length)
    ;
    number = 3;
,

    data =         
       etc... (for length)
    ;
    number = 4;
,

    data =         
       etc... (for length)
    ;
    number = 2;

此数组最多可包含 80 个子字典。

NSSortDescriptor

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"number"  ascending:YES];
[NSMUTABLEARRAYVAR sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
 NSMutableArray *test;            
 test = [NSMUTABLEARRAYVAR copy];

当我 NSLog “测试”时,我得到与 NSMUTABLEARRAYVAR 相同的顺序???

如果能帮我解决这个问题,我将不胜感激,谢谢!

【问题讨论】:

How should I fix this code?的可能重复 【参考方案1】:

sortedArrayUsingDescriptors 不对数组进行就地排序。它返回一个新排序的数组。

sortUsingDescriptors 进行就地排序。

【讨论】:

这行得通!除了我发现了一个问题 - 它是 1、10、11、12,然后在每个以 9 结尾的两位数上,它都会回到单个 - 1、10、11、12、13、14、15、16、17, 18,19,2,20,21,22,23,24,25,26,27,28,29,3,30 等...有什么想法吗? “数字”属性被排序为字符串。如果他们是NSString,你能改变你的字典把他们存储为NSNumber吗?否则,我认为您将需要一个比较器或选择器来对字符串进行排序,就好像它们是数字一样。 您的排序需要基于localizedStandardCompare: - 这将让我们说 10 在 9 之后而不是在 1 之后

以上是关于NSSortDescriptor 没有对我的 NSMutableArray 进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

NSSortDescriptor 错误:“[NSSortDescriptor 计数]:无法识别的选择器发送到实例”

使用 NSSortDescriptor 按时间错误排序(带有核心数据)

NSSortDescriptor 生成 ORDER BY `name` = 'bob' DESC?

NSSortDescriptor 对核心数据获取请求没有影响

为啥没有多个 NSSortDescriptor 与 NSFetchedResultsController 一起工作

如何使用 Fetch Result Controller 正确添加附加部分?