Простой пример привязки NSTableView - PullRequest
1 голос
/ 29 мая 2010

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

В XCode:

У меня есть NSMutableArray в моем AppDelegate, который будет содержать данные, а также соответствующие @property и @ synthesize.

В случае события я вызываю [removeAllObjects] для NSMutableArray и заново заполняю его некоторыми объектами NSDictionary. Каждый словарь содержит 2 КВП: ИМЯ и ЗНАЧЕНИЕ.

В IB:

Я добавил NSArrayController и связал его массив содержимого с моим AppDelegate и установил для ModelKeyPath имя NSMutableArray в AppDelegate.

В NSTableView я связал Контент с ArrayController. ControllerKey = "ограмма объектов ", ModelKeyPath = пусто .

Для каждого из двух столбцов я привязал Значение к AppController и установил для ModelKeyPath значения NAME и VALUE соответственно. ControllerKey = "ArrangedObjects".


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

Jorj

1 Ответ

4 голосов
/ 31 мая 2010

NSArrayController ничем не отличается от NSMutableArray с точки зрения хранения. Если вы можете использовать что-то вроде [[mutableArray firstObject] valueForKey:@"NAME"]; и получить нужное вам значение, тогда контроллер массива должен предоставить вам правильное значение, и привязки должны работать, если у вас правильные соединения.

Если, однако, вышеупомянутая строка кода не дает нужного вам значения, значит, у вас другая проблема. Трудно сказать наверняка, но сейчас я предположу, что у вас есть массив словарей, которые имеют одинаковые два ключа (назовем их firstKey и secondKey). Далее, я предполагаю, что цель состоит в том, чтобы в первом столбце были показаны все значения для firstKey, а во втором столбце - значения для secondKey. Согласно этой теории NSMutableArray в вашем AppDelegate остается таким же, как вы описали выше, однако ваши привязки немного изменятся.

Сначала убедитесь, что для файла пера, с которым вы работаете, для владельца файла установлено значение AppDelegate.

Затем массив содержимого ArrayController должен быть связан с File's Owner.mutableArray.

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

Значение первого столбца должно быть привязано к ArrayController.arrangedObjects.firstKey. Второй столбец, конечно, тот же, за исключением того, что путь ключа модели равен secondKey.

...