Как связать объекты в NSDictionary в NSUserDefaults? - PullRequest
5 голосов
/ 10 ноября 2011

Как связать объекты NSDictionary с несколькими текстовыми полями в Интерфейсном Разработчике?

Я хотел бы привязать каждый объект к определенному элементу в словаре. Например, первое текстовое поле должно быть привязано к Actor:

enter image description here

Ответы [ 3 ]

4 голосов
/ 14 апреля 2013

Вам необходимо добавить NSObjectController в Интерфейсный Разработчик.На вкладке инспектора атрибутов оставьте стандартный режим «Класс» и имя класса в «NSMutableDictionary», но включите «Подготовка содержимого».В инспекторе привязок свяжите «Объект содержимого» с «Контроллер общих пользовательских настроек по умолчанию», «значения» ключа контроллера и «Путь к ключу модели» с ключом словаря в Пользовательских настройках по умолчанию.Включите «Обрабатывает содержимое как составное значение».

Теперь вы можете связать свое текстовое поле (или флажки и т. Д.).значения для ObjectController, с ключом выбора контроллера (!) и ключами в вашем словаре (как путь ключа модели).

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

2 голосов
/ 16 июля 2015

Первое: ответ @ keeluu должен быть помечен как правильный.

Программно

Если вы делаете это в коде, а не через IB, есть «недоработка», на которую стоит обратить внимание. Это выглядит так:

// Assume 'anObjectController' is an NSObjectController.
// Assume 'userDefaultsController' is [NSUserDefaultsController sharedUserDefaultsController]
// Assume 'someDictionary' is an NSDictionary in userDefaults. 

[self.anObjectController 
    bind:NSContentBinding 
    toObject:userDefaultsController 
    withKeyPath:@"values.someDictionary"
    options:@{NSHandlesContentAsCompoundValueBindingOption: @YES}];

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

Причина

Привязка должна быть NSContentObjectBinding вместо NSContentBinding. Класс NSObjectController предоставляет привязку с именем contentObject. Когда вы привязываетесь к этому, все работает правильно.

Это простая ошибка, потому что завершение кода XCode автоматически идет на NSContentBinding, и в любом случае это одно из наиболее часто используемых имен привязки. Это стоило мне нескольких часов хлопот, так что, надеюсь, я спас кого-то еще.

0 голосов
/ 10 ноября 2011

Попробуйте добавить NSDictionaryController к вашему файлу .xib, затем привяжите его Контроллер к своему словарю в пользовательских настройках по умолчанию. Затем вы можете привязать значения текстового поля к словарному контроллеру (клавишаagedObjects).

Я никогда не пробовал, но думаю, что это должно сработать.

Надеюсь, это поможет.

...