Флажок NSButtonCell внутри NSTableView всегда получает NSOffState. Почему?

Привет, ребята, я новичок в программировании Cocoa, и я всегда получаю NSOffState, независимо от того, проверяю или снимаю флажок NSButtonCell (ячейка флажка в пользовательском интерфейсе перетаскивается в ячейку в NSTableView). У меня есть @property IBOutlet NSButtonCell *mySelection, подключенный к соответствующему пользовательскому интерфейсу и следующий код.

- (void) tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
MediaAComparar *media = [mediasRecesEnStock objectAtIndex:row];
NSString *identifier = [tableColumn identifier];

if ([identifier isEqualToString:@"seleccion"])
{
    if ([mySelection state] == NSOnState)
    {
        [media setValue:object forKey:@"seleccion"];
        NSLog(@"on state");
    }

    if ([mySelection state] == NSOffState)
    {
       [media setValue:object forKey:@"seleccion"];
        NSLog(@"off state");

    }

}

}

Я никогда не выполняю NSOnState, единственное сообщение NSLog, которое я получаю, это: выключенное состояние. Кто-нибудь может мне помочь? Спасибо!!


person Carlos Maria Caraccia    schedule 02.01.2014    source источник


Ответы (1)


Если у вас есть одна розетка ("mySelection") и несколько строк, к какой строке, по вашему мнению, подключается розетка? (Ответ: ни один из них. Вероятно, вы подключили его к ячейке-прототипу, которая никогда не отображается и не используется напрямую.)

Но неважно, вам не нужно проверять состояние перед его установкой. Предполагая, что ваш другой код верен, вы сможете сделать что-то вроде:

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    MediaAComparar *medium = [mediasRecesEnStock objectAtIndex:row];

    if ([tableColumn.identifier isEqualToString:@"seleccion"])
        medium.seleccion = object.booleanValue;
}

Меньше кода — лучше код.

person Wil Shipley    schedule 07.01.2014
comment
Большое спасибо за вашу помощь, я думал, что меня уведомят по почте, что на мой вопрос ответили. Вот почему я так поздно ответил. Я тоже это понял. Ваш ответ мог бы сэкономить мне много времени. Очень король с твоей стороны. - person Carlos Maria Caraccia; 14.01.2014