Cocoa绑定没有按预期工作?尝试将NSTextField的启用绑定到复选框状态

时间:2012-02-20 22:46:44

标签: cocoa binding checkbox nstextfield

我只是尝试使用复选框来启用/禁用NSTextField。我在下面详细介绍了我尝试的最后一种方法,但我尝试了多种方法:

  1. 使用NSObjectController与内容对象绑定到控制器,复选框和标签绑定到NSObjectController选择与控制器中属性的关键路径。有无NSIsNil Transformer。

  2. 没有NSObjectController,其复选框和标签绑定到控制器,控制器中的BOOL属性的键路径。有无NSIsNil Transformer。

  3. 添加了键的NSObjectController和“准备内容”设置了复选框和标签绑定到NSObjectController选择并添加了键路径的键。有无NSIsNil Transformer。

  4. 我已经阅读了大量的例子并阅读了文档,并且没有运气这样做。

    1. 清洁项目可可项目。
    2. NSObjectController“对象控制器”已添加到main.xib。
    3. 将IB中的NSObjectController设置为“准备内容”
    4. 向键添加值“enableText”。
    5. 将复选框和标签拖到视图上。
    6. 将绑定添加到“Value”绑定到“Object Controller”的复选框,使用Controller Key“selection”和Modal Key Path“enableText”。此时自动完成报告“未找到完成”!它应该找不到我添加到Object Controller ???
    7. 的那个
    8. 使用Controller Key“selection”和Modal Key Path“enableText”将绑定添加到绑定到“Object Controller”的“Enabled”的标签。同上。
    9. 运行并崩溃。如果我将标签绑定设置为具有NSIsNil的Transformer或它提供的任何选项,则它不会崩溃,但是复选框不会更改标签的启用状态。崩溃结果如下。

      值得注意的是,如果我还在标签值和与启用的绑定相同的键之间添加绑定,那么当我切换复选框时,标签内容会在0和1之间切换。所以,这看起来应该很容易适用于启用的绑定......但事实并非如此。

      2012-02-20 23:43:58.273 TestBindings2[12346:903] -[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 0x100123540
      2012-02-20 23:43:58.275 TestBindings2[12346:903] An uncaught exception was raised
      2012-02-20 23:43:58.276 TestBindings2[12346:903] -[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 0x100123540
      2012-02-20 23:43:58.278 TestBindings2[12346:903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 0x100123540'
      

      使用XCode 4.2和OSX 10.6.8。

1 个答案:

答案 0 :(得分:1)

试图以与“启用”完全相同的方式绑定Label的“隐藏”,它确实隐藏了它。这让我意识到我正在通过绑定正确地做事。我试图手动禁用Label,看到这没有做任何事情。然后我在某个地方看到它表示标签是启用的NSTextFields,这表明它们无法被禁用。果然,将标签更改为文本字段,功能按预期工作。