#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
сделает свое дело.