У меня есть NSTableView, который связывается с NSArrayController. Я хотел бы иметь один из столбцов таблицы, показывающих индекс строки таблицы. Это достаточно легко сделать, когда Вы реализуете NSTableDataSource сами, но я не могу понять это со связанным табличным представлением. Я предполагаю, что здесь ищу что-то как @count ключевой путь, который дает мне количество arrangedObjects (который является @index), но это, очевидно, отсутствует.
Два разъяснения:
Как я понимаю, можно было бы не привязывать этот столбец таблицы, а использовать источник данных. Я вспоминаю, что NSTableView поддерживает подобную операцию "двойного режима", но не могу найти документов, подтверждающих это.
.Предполагая, что вы ставите перед собой цель воспроизвести поведение iTunes, ваш столбец должен отображать только от 1 до (количество видимых строк). На самом деле, это вовсе не обязательно должно быть связано с вашей моделью.
Итак, дайте контроллеру свойство динамически генерируемого массива и сделайте его зависимым от массива реальных объектов модели.
Для этого свойства реализуйте методы доступа к массиву - методы доступа к массиву, с проиндексированным геттером просто вычисляя idx + 1
, box и возвращая этот объект. Также может понадобиться реализовать геттер целого массива, чтобы удовлетворить KVC.
Убедитесь, что столбец установлен как нередактируемый, а привязка установлена не условно включенной
. В противном случае, вы получите исключение (за то, что у вас не будет setters для этого свойства), когда пользователь попытается ввести новый индекс для строки.
Одно замечание предостережение: Это может вызвать проблемы, так как NSTableView не ожидает, что его столбцы будут привязаны к дискретным массивам; он ожидает, что все его столбцы будут привязаны к различным свойствам объектов модели в одном массиве. Может потребоваться привязка содержимого
самого представления таблицы к вашему массиву объектов модели, в дополнение к привязке содержимого столбцов, и я сталкивался с этим раньше .