2015-01-17 2 views
0

У меня есть программа, использующая Core Data, с столбцами NSTableView, связанными через NSArrayController. Это устраняет проблему, столбцы столбцов заполняются без проблем. Я расширяю таблицу, чтобы включить NSPopupButton - однако что-то нечетное случается, когда кнопка добавляется. Просто перетащив кнопку в столбец, затем запустив программу без подключений или привязав ее к Popup, все остальные столбцы не заполняются правильно - они просто отображают текст заполнителя по умолчанию.NSPopupButton не работает в NSTableview

Мысли?

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

Почему у других колонок возникли проблемы? Я попытался добавить CheckBox и имел ту же проблему. Я искал вокруг сети и ТАК, но не нашел ответа.

Буду благодарен за любые мысли/предложения.

Благодарим вас заблаговременно.

[EDIT] ----

В таблице представлен вид на основе и NSTableCellView.

arrayController:

  • Обязанный Entity Name
  • Параметры, присоединенные к главному контроллеру; Ключевой путь: managedObjectContext

TableView:

Колонки:

  • Значение: Обязанный arrayController, ключевой путь: имя, возраст, и т.д. ...

NSPopupButton:

Значение: привязано к главному контроллеру, путь: catArrayController.arrangedObjects.name

Главный контроллер:

IBOutlet: catArrayController Обязанный catArrayController в IB

+0

Является ли табличным представлением на основе представления или 'NSCell'? Если на основе представления, являются ли ячейки представления 'NSTableCellView' или они просто управляют как 'NSTextField'? Объясните, какие привязки были настроены для таблицы и/или ее столбцов, со спецификой. Что-нибудь записывается на консоль в сломанном случае? –

+0

См. Правки: Кроме того, никаких ошибок или информации в консоли нет. – littleDrummerBoy

ответ

1

С видом на основе представления таблицы, вы предназначены для связывания Content табличного представления привязки к контроллеру массива. Вы делаете не свяжите обязательные значения столбцов. От Table View Programming Guide for Mac: Populating a Table View Using Cocoa Bindings:

Примечание: В одном -На таблице NSView, вы свяжете содержание табличного представления в контроллер массива arrangedObjects. Это отличается от метода, который вы используете, если работаете с таблицей NSCell.

Это обязательство заставляет каждый вид ячейки иметь свой объект objectValue, установленный для объекта, соответствующего строке, если у него есть такое свойство. Обратите внимание, что представления ячеек не получают значения, специфичные для столбца. Все ячейки строки получают одинаковое значение.

С ваших взглядов на ячейки NSTableCellView s, они имеют свойство objectValue. Затем в подзонах представления ячеек должно быть привязано значение Value привязано к представлению ячейки с помощью пути ключа, проходящего через objectValue к определенному свойству (имя, возраст и т. Д.).

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

+0

Настройка этого способа работает, спасибо. Я новичок и читаю книгу от Aaron Hillegass, в которой он связывает привязку значений столбцов, что сейчас интересно. Если вы знаете, почему, не могли бы вы послать мне премьер-министра - еще раз спасибо. – littleDrummerBoy

+0

Я могу только догадываться, что это издание книги предшествует существованию табличных представлений на основе представления. Таким образом, это был бы «NSCell», но не знал бы конкретно упоминать этот факт, поскольку это был единственный вид. И ты же рад. –

Смежные вопросы