取消选择绑定NSTableview列中的复选框时出现问题

时间:2014-04-03 03:40:24

标签: cocoa nstableview osx-mavericks cocoa-bindings nsbuttoncell

我正在使用由this project创建的aneesh171,它显示了在NSTableView中创建复选框以及如何绑定它们。我是OSX开发的新手,并试图了解它是如何工作的。

该项目基本上是NSTableView列中绑定到阵列控制器的复选框。

出于某种原因,当我取消选中其中一个复选框时,控制台窗口中会显示以下消息:

2014-04-03 04:22:55.579 MyApp[5735:303] Error setting value for key path objectValue.selected of object <NSAutounbinder: 0x600000258120 - a nonretaining proxy for <NSTableCellView: 0x60000019f890>> (from bound object <NSButton: 0x60000015efb0>): [<__NSDictionaryI 0x61000006f540> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key selected.
2014-04-03 04:22:55.581 MyApp[5735:303] (
    0   CoreFoundation                      0x00007fff87b3a25c __exceptionPreprocess + 172
    1   libobjc.A.dylib                     0x00007fff8a3f6e75 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff87b3a038 +[NSException raise:format:arguments:] + 104
    3   AppKit                              0x00007fff927936c5 -[NSBinder _setValue:forKeyPath:ofObject:mode:validateImmediately:raisesForNotApplicableKeys:error:] + 837
    4   AppKit                              0x00007fff92793327 -[NSBinder setValue:forBinding:error:] + 245
    5   AppKit                              0x00007fff92c8b4ee -[NSValueBinder _applyObjectValue:forBinding:canRecoverFromErrors:handleErrors:typeOfAlert:discardEditingCallback:otherCallback:callbackContextInfo:didRunAlert:] + 194
    6   AppKit                              0x00007fff92c8b871 -[NSValueBinder applyDisplayedValueHandleErrors:typeOfAlert:canRecoverFromErrors:discardEditingCallback:otherCallback:callbackContextInfo:didRunAlert:error:] + 621
    7   AppKit                              0x00007fff927c5107 -[NSValueBinder performAction:] + 288
    8   AppKit                              0x00007fff927c4fc5 -[_NSBindingAdaptor _objectDidTriggerAction:bindingAdaptor:] + 133
    9   AppKit                              0x00007fff927531a0 -[NSControl sendAction:to:] + 56
    10  AppKit                              0x00007fff9279fced -[NSCell _sendActionFrom:] + 128
    11  AppKit                              0x00007fff927b96c5 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2316
    12  AppKit                              0x00007fff927b8a97 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 487
    13  AppKit                              0x00007fff927b81ad -[NSControl mouseDown:] + 706
    14  AppKit                              0x00007fff92739b48 -[NSWindow sendEvent:] + 11296
    15  AppKit                              0x00007fff926d86e4 -[NSApplication sendEvent:] + 2021
    16  AppKit                              0x00007fff92528b89 -[NSApplication run] + 646
    17  AppKit                              0x00007fff92513913 NSApplicationMain + 940
    18  MyApp                               0x0000000100049132 main + 34
    19  libdyld.dylib                       0x00007fff85ffe5fd start + 1

选中此复选框后,此消息不会显示在控制台上。

你们能告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:1)

我更新了项目的git版本。

每当通过值绑定绑定控件时,它都会调用其getter方法来加载值。而当您尝试修改这些值时,它将尝试调用属性的setter方法。在项目中,字典是硬编码的,因此没有setter方法,这就是为什么你得到关键路径objectValue.selected&#34;&#34;的错误设置值的原因。

检查创建FruitModel的新版本,它解决了setter问题。

如果您遇到任何问题,请告诉我。