Привязать NSTableView к массиву в NSUserDefaults: Mutable! - PullRequest
1 голос
/ 22 декабря 2009

Моя настройка - NSTableView с одним столбцом, который связан с NSUserDefaults. Теперь это работает отлично, пока в моем табличном представлении ничего не меняется. Когда я пытаюсь изменить значение (все простые строки), я получаю следующую ошибку:

Error setting value for key path of object Acid (from bound object <NSTableColumn: 0x1796ef10> identifier: path with object ID 455 in nib named TXPreferencesWindow.nib): [<NSCFString 0x165297e0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key .

Есть ли простой способ сделать это возможным? Или я должен просто реализовать методы Datasource и Delegate? (если бы я это сделал в первую очередь, все равно было бы быстрее ...)

Ответы [ 2 ]

4 голосов
/ 22 декабря 2009

Ваша ошибка говорит о том, что существует проблема с вашей привязкой, поскольку изменение отправляется объекту NSCFString, в то время как его следует отправлять контроллеру.

Вы должны рассказать немного больше о том, что вы пытаетесь связать с табличным представлением, чтобы мы могли рассказать вам, как вы это правильно настроили.

В одном из моих проектов я связал NSArray из NSMutableDictionary, содержащий редактируемое логическое значение и строку, с NSTableView.

Я использовал NSArrayController, у которого массив содержимого привязан к массиву в NSUserDefaultsController. Содержимое NSTableView затем связывается с arrangedObjects контроллера массива и значением отдельных столбцов arrangedObjects.dictionaryKey. IIRC импортирует, чтобы в контроллере была выбрана опция «Обрабатывать содержимое как составное значение».

2 голосов
/ 22 декабря 2009

Привязки действительно не любит обходиться без модельных объектов. NSUserDefaultsController работает для простых значений, таких как привязка флажка к значению по умолчанию, которое должно иметь логическое значение, но привязка столбца таблицы к массиву строк не будет работать в любом контексте - для представления таблицы требуются объекты модели, которые могут запрашивать значения для ключевого пути модели. Отсутствие пути к ключу модели привело к появлению сообщения об ошибке («не соответствует значению ключа для ключа [вставлена ​​пустая строка]».).

Ваше текущее решение, вероятно, самое простое. Другим, который может быть лучше для некоторых целей, было бы решить, что эти строки являются , и построить объект модели вокруг этого. (Он не должен быть сложным. Даже если все, что у него есть, это строковое свойство, в этом нет ничего плохого.) Затем, имейте это свойство массива в контроллере вашего собственного создания; инициализируйте это свойство из массива строк из значений по умолчанию в вашем инициализаторе и обновите массив строк в значениях по умолчанию в установщике свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...