Редактируемый NSTableView с привязками не будет устанавливать значения в модели

StackOverflow https://stackoverflow.com/questions/409424

Вопрос

Вот моя установка.

В делегате моего приложения у меня есть свойство currentFoo.Свойству currentFoo присвоен текущий выбранный экземпляр Foo.Каждый экземпляр Foo имеет свойство, которое представляет собой NSMutableArray и называется results.Объекты в результатах могут быть разных типов: NSNumber, NSString и т. д.

У меня есть NSTableView, который отображается в определенное время и позволяет пользователю видеть коллекцию результатов в currentFoo.Существует также пользовательский интерфейс, позволяющий добавлять и удалять результаты.

NSTableView имеет один столбец, который привязан к ключу контроллера организованных объектов NSArrayController.Я написал подкласс NSValueTransformer, который используется в этой привязке для преобразования различных возможных типов, найденных в массиве результатов, в строковое представление, которое я хочу отобразить в столбце таблицы.

Привязка массива содержимого NSArrayController подключена к ключу контроллера выбора NSObjectController с currentFoo.results в качестве пути к ключу модели.Наконец, NSObjectController получает свое содержимое от делегата приложения.

Все это работает просто великолепно, добавление, удаление и отображение currentFoo.results в NSTableView работает так, как я хочу.

Моя проблема в том, что я пытаюсь отредактировать содержимое табличного представления.Я установил свой подкласс NSValueTransformer, чтобы разрешить обратные преобразования, и реализовалverseTransformedValue:. Прохождение кода показывает мне, что когда я редактирую значение в строке NSTableView, оно правильно отправляется в этот метод моего преобразователя значений, преобразуется и возвращается.

Ошибка возникает, когда привязки пытаются затем обновить модель с помощью обратного преобразованного значения:

Связки какао:Значение настройки ошибки для пути ключа объекта 0 (из Bound Object (null)):[ setValue:forUndefinedKey:]:Этот класс не является кодирующим значением ключа для ключа.

Таким образом, по сути, этот массив привязан к представлению таблицы, и когда пользователь редактирует строку, я хочу преобразовать строку обратно в соответствующий объект.Привязки какао выдают мне эту ошибку, которая заставляет меня поверить, что мне нужно что-то установить в ключевом пути привязки NSTableColumn, но я не уверен, что именно.Я попробовал «сам», и это не сработало.

Любая помощь приветствуется.

Это было полезно?

Решение

Ключ модели не может быть пустым, поэтому вы получаете сообщение об ошибке.

Измените объекты результатов с примитивных объектов (строки, числа в штучной упаковке и т. д.) на объекты модели (класса FooResult) и установите путь ключа модели привязки на имя свойства тех объектов модели, которые будут иметь табличное представление. мутировать.

По сути, вы не можете напрямую привязаться к массиву примитивных объектов.Вы должны привязаться к какому-либо свойству массива объектов модели.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top