Могу ли я использовать NSDictionaryController для словаря словарей?

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

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

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


person kallikak    schedule 27.09.2011    source источник
comment
Вы смотрели на NSDictionaryController?   -  person sosborn    schedule 27.09.2011
comment
В итоге я загрузил данные словаря из plist в пользовательские объекты и сделал это таким образом.   -  person kallikak    schedule 05.10.2011


Ответы (1)


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

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

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

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