2014-01-26 3 views
0

У меня есть NSTableView с NSTableColumn с NSButtonCell (флажок) внутри него, который генерирует новый экземпляр NSButtonCell каждый раз, когда добавляется строка, которую я настроил в IB. Тем не менее, мне очень интересно, почему в следующем фрагменте кода второй NSLog возвращает 0.Интересует состояние NSButtonCell

NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]); 
[[self.tableView preparedCellAtColumn:0 row:0]setState:1]; 
NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]); 

Тот факт, что она возвращает 0 означает, что я утра посылает сообщение к экземпляру NSButtonCell, верно? Почему же setState: изменить возвращаемое значение второго NSLog?

ответ

0

Если получал nil также печать будет 0, я бы предложил попробовать этот

NSLog(@"cell:%@", [self.tableView preparedCellAtColumn:0 row:0]) 

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

Адрес, на который вы звоните? После того, как таблица уже отображается? Во время инициализации?

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

Попробуйте выполнить команду NSLog, чтобы убедиться, что вы на самом деле получаете ячейку назад, а не nil со стола.

+0

Да, я пробовал называть его как в ApplicationDidFinishLaunching: так и в IBAction AddTask: который срабатывает при нажатии кнопки, и оба они возвращаются по линиям ячейки: . Итак, я знаю, что есть экземпляр. Однако вызов setState: на нем не вызывает изменения внешнего вида. На самом деле, что было бы очень полезно, если бы я мог инициализировать его с определенным состоянием, поскольку я пытаюсь выяснить способ загрузки состояния флажков из plist. Сначала я думал, что должен существовать такой метод, как initWithState: но такой метод не существует ... – PopKernel

+0

Поскольку ваш флажок находится в строке в представлении таблицы, источником данных является то, как вы должны устанавливать состояние своего флажка, а не программно. Когда вы хотите изменить состояние флажка, вам необходимо обновить источник данных, который затем обновит флажок в представлении таблицы. Если вы измените его вручную по мере того, как вы пытаетесь сделать это, оно просто будет изменено на любое значение, возвращаемое источником данных для этой строки. Использование источника данных также заключается в том, как вы первоначально устанавливали состояния для всех своих флажков. –

+0

Для получения дополнительной информации ознакомьтесь с этой страницей на веб-сайте разработчика Apple: https://developer.apple.com/library/mac/documentation/cocoa/conceptual/TableView/PopulatingView-TablesProgrammatically/PopulatingView-TablesProgrammatically.html –

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