Могу ли я использовать NSDictionaryController для словаря словарей? - PullRequest
1 голос
/ 27 сентября 2011

У меня есть файл plist, в котором хранится информация, необходимая для отображения в приложении, организованном в виде словаря словарей.Я только начал программировать Cocoa, поэтому не уверен, что это лучший способ.Очевидно, что я могу делать все это вручную, кодировать циклы и добавлять данные в элементы пользовательского интерфейса, но мне кажется, что привязки и предоставленные контроллеры должны позволить мне сделать это более просто.

Я был специальноинтересно, был ли прямой способ (например, использующий в основном Interface Builder) связать NSDictionary, полученный мной при чтении файла plist, который сам содержит дополнительные элементы NSDictionary, которые, в свою очередь, содержат пары строк имя-значение, с соответствующимэлемент пользовательского интерфейса - вероятно, контурный вид или браузер.

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

1 Ответ

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

Я не думаю, что вы сможете сделать это с помощью NSBrowser или NSOutlineView.Я говорю это потому, что если вы используете привязки с этими представлениями, вам нужно использовать NSTreeController.NSTreeController предоставляет возможность указать, какие ключи в вашей модели указывают, есть ли у текущего объекта дочерние объекты (isLeaf) и как получить доступ к дочерним объектам (дочерним объектам).

Так что, если вы собираетесь использовать один изэти два вида, вы должны иметь возможность добавить дополнительные ключи и свойства в вашу модель, чтобы сделать это.Много раз, когда я работаю с NSOutlineView и NSBrowser, мне проще всего вообще пропустить привязки и просто использовать все делегаты и источники данных.Они требуют больше кода, но их нетрудно собрать, и иногда я предпочитаю их привязкам, если моя модель данных сложна или если данные не в формате, который легко прокачивается через NSTreeController.

ОднакоВы можете использовать NSTableView, выполнив следующие действия.

  1. Создайте NSDictionaryController в вашей NIB.
  2. В контроллере, который читает в вашем списке, создайте выход для NSDictionaryController и подключитевыход с использованием Interface Builder.
  3. В коде, который читает plist, добавьте дополнительную строку кода, которая устанавливает содержимое NSDictionaryController, в корневой словарь из plist.
  4. В вашем NIB создайтеNSArrayController.Привязать привязку «Content Array» контроллера массива к NSDictionaryController.Для свойства привязки «Ключ контроллера» задайте «selectedObjects».
  5. Теперь возьмите NSTableView и поместите его в вашу NIB.Свяжите каждую привязку «Значение» в NSTableColumn с NSArrayController, а для свойства привязки «Ключ контроллера» укажите ключ из словаря, значение которого вы хотите отобразить в столбце таблицы.
...