Привязка NSTokenField к контроллеру массива - PullRequest
3 голосов
/ 07 июня 2011

У меня есть контроллер массива и поле токена для ввода данных.
Я не могу найти способ использовать поле токена для привязки текста токена к контроллеру массива.

Проблема в том, что когда я использую делегат поля токена, он возвращает NSArray вместо атрибута моей сущности в формате NSString, а при запуске моего приложения, если я использую это поле токена, у меня появляется ошибка, которая показывает мне режим несовместимых данных (атрибут принимает NSString вместо NSArray).

На самом деле, я могу обработать поле токена, чтобы показать мне параметры токена, но я не могу обработать привязку поля токена в массив данных!

Что я могу сделать, чтобы решить эту проблему?

1 Ответ

1 голос
/ 18 марта 2014

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

Если все, что вам нужно, это массив строк, хранящихся в основных данных и не имеющих отношения к representedObject или делегатам полей токенов, вы действительно можете делать все в XIB и в своей xcdatamodel.

Первый шаг в переключении атрибута NSString вашего основного объекта данных на атрибут, который вы можете привязать к полю токена. Вам нужно сделать атрибут трансформируемого типа. Назовите это tokenStringArray. Вы закончили с моделью данных. (И любой код, который обращается к этому атрибуту, теперь должен ожидать массив строк.)

Привязка значения поля токена требует подключения к контроллеру, который может доставить один объект с ключом контроллера, и этот единственный объект имеет путь ключа модели, который доставляет массив строк. Поэтому, если ваш контроллер массива выбирает одну сущность, у вас будет selection для ключа контроллера и tokenStringArray для пути ключа модели. Выберите «Постоянно обновляет значение», иначе сохранение может не сохраниться сразу.

Вот и все. Привязав трансформируемый атрибут tokenStringArray к значению поля токена, пользовательские изменения в поле токена сохраняются.

[Для чего это стоит, у меня лично есть объектный контроллер, связанный с одной сущностью. Чтобы связать поле токена с основным атрибутом данных, кажется, что какой-то контроллер должен быть промежуточным, поэтому для меня это контроллер объекта. Если у вас есть таблица, в которой пользовательский выбор сущности должен заполнять поле токена, то вам следует использовать контроллер массива. Поле токена не может редактировать arrangedObjects контроллера массива - оно может принимать и доставлять массив только из одного объекта.]

...