NSTableView中的NSButtonCell复选框始终是NSOffState。为什么?

时间:2014-01-02 23:24:05

标签: objective-c cocoa nstableview nsbuttoncell

大家好我是Cocoa编程的新手,无论是检查还是取消选中NSButtonCell(UI中的Check Box Cell拖动到NSTableView中的单元格),我总是得到NSOffState。 我有一个@property IBOutlet NSButtonCell * mySelection,连接到相应的UI和以下代码。

- (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消息是:off state。 谁能给我一些帮助? 谢谢!

1 个答案:

答案 0 :(得分: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;
}

更少的代码是更好的代码。