Проблема связывания какао; связанные столбцы таблицы не показывают никаких данных, никаких ошибок в консоли - PullRequest
2 голосов
/ 09 ноября 2008

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

Я следовал руководству CocoaDevCentral Привязки какао , чтобы убедиться, что я охватил все основы, но все работает не правильно. У меня есть интерфейс master-detail, но у меня возникают проблемы, даже если основная часть интерфейса работает правильно. В главной колонке не отображаются данные, хотя я настроил модель привязок, аналогичную той, которая показана в учебнике. Я убедился, что все мои контроллеры и объекты имеют методы -(id)key и -(void)setKey:(id)key, чтобы они были совместимы с привязками, я создал объект ControllerAlias ​​в моем кончике, подключил его к контроллеру, создал NSArrayController, который связывает к одному из NSMutableArrays из класса, к которому подключается ControllerAlias, убедитесь, что вы задали тип объектов, содержащихся в массиве, а затем я связал столбец таблицы с NSArrayController.

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

Единственное, о чем я мог подумать, чтобы убедиться, что все работает правильно, это проверить, что NSMutableArray, который подключается к NSArrayController, действительно что-то в нем есть, и он делает.

Есть предложения? Какие еще типичные подводные камни существуют с привязками Какао, которые я должен проверить?

Ответы [ 3 ]

1 голос
/ 09 ноября 2008

Поставили ли вы точку останова в свой ключ: метод, чтобы определить, вызывается ли он или нет? Если это не так, то это означает, что что-то настроено неправильно для привязки в столбце таблицы (поскольку вы убедились, что в вашем массиве есть элементы).

Я не думаю, что вам нужно больше создавать Object Controller (этот урок немного устарел). Просто создайте Object в вашей NIB и установите его класс в свой класс Controller. Вы можете установить привязки непосредственно через него вместо ObjectController.

Чтобы установить привязку, я делаю следующее:

  1. Создайте экземпляр моего контроллера в NIB.
  2. Создайте NSArrayController, привяжите его к массиву в моем контроллере.
  3. Для каждого столбца в таблице свяжите значение с элементом объекта в контроллере массива.

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

0 голосов
/ 09 ноября 2008

Итак, в моем исходном коде я модифицировал массив (который представлял NSArrayController) в awakeFromNib, а не в init, поэтому изменения не были отражены в интерфейсе, так как я не модифицировал массив через ключ метод наблюдения по значению.

Я изменил код с

theArray = [[NSMutableArray alloc] init];
[theArray addObject:newThing];

до:

theArray = [[NSMutableArray alloc] init];
NSMutableArray *bindingsCompliantArray = [self mutableArrayValueForKey:@"things"];
[bindingsCompliantArray addObject:newThing];

Я думаю, что другое решение состоит в том, чтобы выполнить загрузку в методе - (id) init вместо - (void) метода awakeFromNib, но для этого потребовался больший рефакторинг, поэтому я этого не делал.

Я понял это, добавив кнопку для создания новой вещи в списке массивов с помощью NSArrayController, и когда я нажал кнопку, новая вещь была добавлена ​​в массив, и мой существующий массив также волшебным образом обнаружился.

0 голосов
/ 09 ноября 2008

Я создал объект ControllerAlias ​​в моем перо,

Что такое «псевдоним контроллера»? Это модель, контроллер или вид?

подключил его к моему контроллеру,

Что вы имеете в виду?

создал NSArrayController, который связывается с одним из NSMutableArrays из класса, к которому подключается ControllerAlias,

Классы не имеют NSMutableArray с.

Какое свойство контроллера массива вы связали?

С каким объектом вы его связали?

С каким ключевым путем этого объекта вы связали его?

… а затем я связал столбец таблицы с NSArrayController.

Какое свойство столбца таблицы вы связали?

С каким свойством (путем ключа) контроллера массива вы связали его?

...