2015-08-25 3 views
2

Моя среда:Связывание NSPopUpButton для основных данных висит Xcode построить

  • Mac OS X V 10.10.4
  • Version 6.4 (6E35b)

Мой проект:

  • Mac с использованием Swift 1.2 с раскадровкой

Немного фона: у меня есть NSTableView с несколькими столбцами, которые подключены к NSArrayController, который, в свою очередь, подключается к основным данным (например, сущность «Автомобиль»). Все работает хорошо - я могу загружать и редактировать значения столбцов и сохранять изменения в sqlite. Все это выполняется с помощью привязок через Interface Builder. Теперь я хочу добавить новый столбец «color» в эту таблицу, представляющий отношение к другому объекту, например сущность «Цвет». Каждая строка будет иметь NSPopUpButton для этого нового столбца; всплывающая кнопка должна иметь свои значения, заполненные из второго NSArrayController, связанного с объектом «Цвет». Таким образом, «цвет» - это отношение «один к одному» между «Автомобилем» и «Цвет» (многие автомобили могут ссылаться на данный цвет), и мне бы хотелось, чтобы значения во всплывающей кнопке соответствовали свойству «имя» из цвета ,

Что я сделал:

  • В раскадровке (под контроллер сцены, содержащая таблицу автомобилей), я добавил второй NSArrayController, "Цвет массив Controller":

    1) в разделе «Attributes Inspector» -> Mode = имя объекта, имя объекта = цвет, установлен флажок «Готово содержимое»

    2) в разделе «Инспектор привязок» -> Параметры -> Контекст управляемого объекта -> «Связать с» -> выбран «Контроллер автомобилей» -> Путь к ключу модели = контекст

  • В таблице «Автомобили» (под NSTableCellView) добавлен NSPopUpButton.

На данный момент, все строит и работает должным образом, за исключением того, что все столбцы в таблице показывает «Пункт 1» значение по умолчанию из всплывающей кнопки (я могу также увидеть другие значения по умолчанию, когда я разверните всплывающее окно).

Теперь, я попытался следующие в тщетной попытке загрузить всплывающее окно с соответствующими значениями:

Стратегия 1:

с помощью Interface Builder, выбрал NSPopUpButton. Под инспектором Bindings (Выбор значения), отметьте «Привязать к» и указав контроллер массива цветов сверху; Ключ контроллера -> builtObjects; Модель Key Path -> имя

Стратегия 2:

  • создал IBOutlet "colorsArray", для "Цвета массива Controller" в контроллере Автомобили;
  • с помощью Interface Builder выбрал NSPopUpButton. Под инспектором Bindings (Выбор значения), отметьте «Привязать к» и указанному контроллеру автомобилей; Путь ключа модели -> colorsArray.orderedObjects

Для обеих стратегий выше, когда я пытаюсь запустить (или просто построить) проект, Xcode зависает при компиляции 1 из 1 файлов раскадровки. Монитор активности показывает, что процесс «ibtoold» постоянно потребляет всю доступную память (как только я его убью, Xcode сообщает, что моя сборка не удалась).

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

+0

Просто заметил в сборке входит следующее сообщение об ошибке во время сборки нависает: «ibtoold [3037: 172316] Игнорирование исключения, связанные с работы с креплениями: NSInvalidArgumentException, контроллер не может быть нулевым» не совсем уверен, что сделайте это. – buzo

ответ

2

Я просто побежал в том же номере: Как только я свяжите NSPopupButton «s content связывание с ArrayController» s arrangedObjects Xcode компилирует раскадровку навсегда. Когда я удаляю привязку, она будет компилироваться, как обычно :(

Поскольку мой NSPopupButton находится внутри столбца таблицы, я удалил контроллер массива, и теперь я привязываю его content непосредственно к свойству значения объекта столбца таблицы .