【问题标题】:Why doesn't my simple Cocoa binding work?为什么我的简单 Cocoa 绑定不起作用?
【发布时间】:2013-10-02 08:38:54
【问题描述】:

Cocoa 绑定、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

【问题讨论】:

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


    【解决方案1】:

    根据 IB,NSTextField 没有“stringValue”绑定,只有一个“值”绑定。除非您在代码中设置 UI,否则最简单的做法是使用 IB 进行绑定。

    在 xib 文件中选择NSTextField。然后在右侧的实用程序区域中选择绑定选项卡。列出的第一个绑定应该是value,展开它。从弹出菜单中选择“文件的所有者”作为要绑定的对象。 Xcode 会为您在 Model Key Path 字段中输入 self,只需在字段末尾添加 .colorSpaceName 并按回车即可。

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

    注意:如果您在代码中创建 UI,则无需将任何元素声明为 IBOutlet,因为 IBAction 只是 IB 知道要注意哪些属性和方法的关键字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 2020-05-21
      • 1970-01-01
      相关资源
      最近更新 更多