为什么我的简单Cocoa绑定不起作用?

时间:2013-10-02 08:38:54

标签: objective-c macos cocoa-bindings key-value-coding kvc

可可绑定,KVC和KVO开始让我头疼。我想要做的就是将NSTextField的值绑定到我的视图控制器的属性值。有人能告诉我哪里出错了吗?任何帮助将不胜感激。下面是我正在进行的简化版本。

MyViewController.h:

#import <Cocoa/Cocoa.h>

@interface MyViewController : NSViewController

@property NSString *colorSpaceName;
@property IBOutlet NSTextField *colorSpaceLabel;

@end

MyViewController.m:

#import "MyViewController.h"

@implementation MyViewController

@synthesize colorSpaceName;

- (id)initWithNibName:(NSString *)nibNameOrNil 
               bundle:(NSBundle *)nibBundleOrNil
{
    // ...
    if ( self ) {
        [self.colorSpaceLabel bind:@"stringValue" 
                          toObject:self 
                       withKeyPath:@"colorSpaceName" 
                           options:nil];
    }
    // ...
}

@end

1 个答案:

答案 0 :(得分:0)

根据IB,NSTextField没有'stringValue'绑定只是一个'值'绑定。除非你在代码中设置所有UI,最简单的方法是使用IB进行绑定。

在xib文件中选择NSTextField。然后在右侧的实用程序区域中选择绑定选项卡。列出的第一个绑定应为value,展开它。从弹出菜单中选择“File's Owner”作为要绑定的对象。 Xcode会为您输入self到模型密钥路径字段,只需将.colorSpaceName添加到字段的末尾,然后按返回。

如果您真的必须在代码中进行绑定,请将@"stringValue"更改为@"value",并确保您的插座已在IB中连接。

注意:如果您在代码中创建UI,则不需要将任何元素声明为IBOutlet,因为IBAction只是IB的关键字,以了解要支付的属性和方法注意。