Привязка NSPredicateEditor к общему контроллеру пользовательских настроек по умолчанию

У меня есть NSPredicateEditor, который является частью панели настроек инструмента, который я создаю.

Я хотел бы сохранить выбор пользователя так же, как и любой другой элемент в объекте NSUserDefaults, но когда я добавляю привязку к объекту NSPredicateEditor и запускаю инструмент, он не будет сохранять данные, и в дальнейшем это приводит к тому, что другие значения по умолчанию не отображаются . Когда я убираю привязку и перекомпилирую, все остальное возвращается.

Каков наилучший способ хранения данных NSPredicatedEditor в качестве предпочтения пользователя?

Спасибо.


person chaimp    schedule 06.03.2011    source источник


Ответы (1)


Всякий раз, когда пользовательский интерфейс NSPredicateEditor изменяется, эти изменения немедленно отражаются в редакторе objectValue (т.е. он представлен NSPredicate). Таким образом, вы можете просто взять этот предикат и заархивировать его с помощью файла NSKeyedArchiver. Это фактически превратит предикат в объект NSData, который можно сохранить в NSUserDefaults.

Чтобы прочитать его обратно, просто возьмите объект NSData, пропустите его через NSKeyedUnarchiver и setObjectValue: в редакторе предикатов.

Вы можете вероятно добиться этого с помощью привязок, хотя я никогда не пробовал. Вы можете связать value NSPredicateEditor с чем-то, что предоставляет NSPredicate (или NSPredicate в форме NSData). Вам также, вероятно, потребуется указать, что преобразователь значений является преобразователем NSKeyedUnarchiveFromData.

person Dave DeLong    schedule 07.03.2011
comment
Спасибо. Он работал в Interface Builder, используя NSKeyedUnarchiveFromData. Это просто сэкономило мне столько времени. Я реализовал делегат, который обновлял бы настройки описанием предиката при нажатии кнопки. Но теперь, благодаря вашему простому ответу, я просто подключил привязку в конструкторе интерфейсов, и она просто работает. Здорово! - person chaimp; 07.03.2011