You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C自定义类FileModel按NSDate排序失效问题

问题分析:FileModel按editDate排序未生效的原因及解决办法

嘿,我一眼就瞅见你代码里的问题啦!你的排序逻辑犯了个超容易疏忽的小错误,直接导致排序完全没按预期工作。

核心错误点

在你写的sortedArrayUsingComparator排序block里,获取第二个对比日期的时候,错误地重复取了对象a的editDate,而不是对象b的!看这段有问题的代码:

NSDate *first = [(FileModel*)a editDate];
NSDate *second = [(FileModel*)a editDate]; // 这里应该用b,不是a!

因为你拿同一个对象的日期和自己比较,每次返回的都是NSOrderedSame(相等),数组自然不会有任何排序变化,只会保持原本的添加顺序。

修正后的代码

把second的来源改成b就搞定了!另外,你想要的是倒序排列(最新的日期在前),当前的[second compare:first]逻辑是对的;如果需要正序(最早的日期在前),就换成[first compare:second]。修正后的完整排序代码如下:

sortedArray = [fileData sortedArrayUsingComparator:^NSComparisonResult(FileModel *a, FileModel *b) {
    NSDate *first = a.editDate; // 参数已经是FileModel类型,不用强制转换,直接用属性更简洁
    NSDate *second = b.editDate;
    return [second compare:first]; // 倒序,最新日期的FileModel排在最前面
}];

额外说明

你在循环里用[NSThread sleepForTimeInterval:1]生成不同editDate的方法是没问题的,每个FileModel的日期确实会依次晚1秒。修正之后,排序结果就会完全符合你的预期:avocado.png -> grape.png -> durian.png -> cherry.png -> banana.png -> apple.png——毕竟avocado是最后添加的,日期最新,会排在最前面。

内容的提问来源于stack exchange,提问作者dickfala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:45:02