Sorting 通过cocoa绑定在IB中按字符串长度对表列进行排序时,效果不理想

Sorting 通过cocoa绑定在IB中按字符串长度对表列进行排序时,效果不理想,sorting,cocoa-bindings,nstableview,nsarraycontroller,Sorting,Cocoa Bindings,Nstableview,Nsarraycontroller,我使用NSArrayController制作了一个示例应用程序,其中显示了NSTableView上的员工及其工资列表 基本功能按预期工作。此外,当在属性窗格中为表列-employeeName分配选择器-compare或caseInsensitiveCompare时,排序工作正常 当我试图通过在IB中将表列-employeeName的选择器设置为-length来按字符串长度对其排序时,会出现问题。它按字符串长度排序,但排序不正确 它在交替单击时进行排序即,在第一次单击时,它按长度降序对表中的内容进

我使用NSArrayController制作了一个示例应用程序,其中显示了NSTableView上的员工及其工资列表

基本功能按预期工作。此外,当在属性窗格中为表列-
employeeName
分配选择器-
compare
caseInsensitiveCompare
时,排序工作正常

当我试图通过在IB中将表列-
employeeName
的选择器设置为-
length
来按字符串长度对其排序时,会出现问题。它按字符串长度排序,但排序不正确

它在交替单击时进行排序
即,在第一次单击时,它按长度降序对表中的内容进行排序。然后在第二次单击时,它不会按长度按升序排列内容,而是将顶部的箭头设置为升序。然后在第三次单击时,它按长度按升序排列内容,但将表列顶部的箭头设置为降序,以此类推

有人能告诉我我哪里错了吗

谢谢


Miraj

我猜你正在努力完成MacOSX的Cocoa编程第8章

您需要将列的sortKey设置为
personName.length
,选择器设置为
compare:


然后,排序描述符将通过“比较”字符串“长度”进行排序

我猜你正在学习MacOSX的Cocoa编程第8章

您需要将列的sortKey设置为
personName.length
,选择器设置为
compare:


然后,排序描述符将通过“比较”字符串“长度”进行排序

macOS开发(阅读BNR的书)和Swift语言初学者的答案:

Swift字符串没有
length
属性。您可以通过其字符数组的计数来访问其长度

要实现这一点,您应该将
sortKey
设置为
name.characters.count
并将
选择器设置为
比较:


我猜BNR建议您应该找到表示字符串长度的东西,而不是有
长度
属性或方法。

为macOS开发初学者(阅读BNR的书)和Swift语言解答:

Swift字符串没有
length
属性。您可以通过其字符数组的计数来访问其长度

要实现这一点,您应该将
sortKey
设置为
name.characters.count
并将
选择器设置为
比较:

我猜BNR建议您应该找到表示字符串长度的内容,而不是存在
length
属性或方法