Сортировка в NSTableView

#objective-c #cocoa #nstableview

#objective-c #cocoa #nstableview

Вопрос:

Я создаю NSTableView и использую ссылку делегата и источника данных для класса, который я заполняю таблицей. В классе я использую NSMutableArray для хранения значений для таблицы. могу ли я выполнить сортировку в таблице. Как я могу это сделать. Я хочу отсортировать в соответствии со значениями в столбце. Я использую команду сортировки hey amp; selector, но при запуске я получаю эту ошибку [<NSCFString 0x18da00> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.

как это решить.

Ответ №1:

Вы можете подойти к этому одним из двух способов. Более простой способ, который не так подвержен сбоям, если вы не уверены, что делаете, — это просто отсортировать ваш массив содержимого. Вы можете использовать NSMutableArray методы -sort...: для сортировки, и результаты будут отображаться в таблице отсортированными.

Однако «лучший» способ — это иметь вывод сортировки таблицы самостоятельно, используя NSSortDescriptor (вы можете либо установить это в коде, либо через Interface Builder). Чтобы заставить дескриптор сортировки работать с пользовательскими классами, вам пришлось бы сделать их совместимыми с KVC, но, к счастью, вы работаете только с NSString s, так что работа уже выполнена за вас. Либо в Interface Builder, либо в code задайте ключу дескриптора сортировки значение self (поскольку вы сравниваете сами строки, а не переменные их экземпляра) и селектору значение compare: (поскольку вам просто нужно выполнить простое сравнение, и NSString вы реализуете этот метод). Это легко сделать в Interface Builder (после того, как вы установите self в качестве ключа, compare: даже появится всплывающее окно для вас), хотя, если бы вы захотели создать сложный дескриптор сортировки, вам пришлось бы сделать это в коде.

Комментарии:

1. спасибо, но я использую один столбец как NSString, а другой — как int. используя self, я могу отсортировать это, но другой столбец не работает.

2. Связаны ли они друг с другом? Важны ли отдельные строки или их просто нужно упорядочить от наименьшего к наибольшему? Если их просто нужно упорядочить, это не сложно сделать, но если сами строки связаны, вам придется выполнить более сложную работу.

3. спасибо за помощь … да, они связаны. Но я нашел одно решение, отсортировав мой NSMutableArray, который я использую.

4. Хорошо. Рад, что смог чем-то помочь.

Ответ №2:

Похоже, что значения в вашей таблице являются NSStrings . Вам нужно выбрать что-то, на что NSString реагирует в качестве ключа. Вероятно, ключ self сделает свое дело.