我按如下方式对可变数组进行排序:
[m_maFoundObjects sortUsingComparator:
^NSComparisonResult(id obj1, id obj2){
FADObject * o1 = (FADObject *)obj1;
FADObject * o2 = (FADObject *)obj2;
return [o1.name compare:o2.name];
}
];
有人可以告诉我确定排序何时完成的最佳方法,以便我可以在列表中调用reloadData吗?
答案 0 :(得分:3)
排序是同步完成的,所以你应该可以在下一个语句中重新加载。
[m_maFoundObjects sortUsingComparator:
^NSComparisonResult(id obj1, id obj2){
FADObject * o1 = (FADObject *)obj1;
FADObject * o2 = (FADObject *)obj2;
return [o1.name compare:o2.name];
}
];
// Here you can reload your data
答案 1 :(得分:0)
有趣的是,所有数组排序方法都是同步运行的,甚至是sortWithOptions:usingComparator:
,其选项值为NSSortConcurrent。
文档在这一点上保持沉默,但我只是测试并确认了。我写了一个测试比较器块,记录时间和线程ID,并记录排序前后的时间。使用足够大的数组,我能够看到比较器块从不同的线程同时触发,但排序方法在排序过程完成之前没有返回。
我刚刚发布了以下文档评论:
方法sortWithOptions:usingComparator:的文档是 不完整的。
即使指定了此方法,此方法也始终同步运行 选择NSSortConcurrent的值。
用简单的英语说:'这个方法直到数组才返回 即使你指定了NSSortConcurrent的排序选项,也会排序。“在那里 例如,可以在后台线程上调用比较器块,但是 该方法在返回控件之前等待排序完成 给来电者。
让我们所有人都发送有关此问题的反馈意见,因为如果Apple收到多份报告,Apple会更有可能解决这个问题。