0

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
4

1 に答える 1

1

IB によるとNSTextField、'value' バインディングだけの 'stringValue' バインディングはありません。UI をすべてコードで設定する場合を除き、バインディングに IB を使用するのが最も簡単です。

NSTextFieldxib ファイルで を選択します。次に、右側のユーティリティ領域でバインディング タブを選択します。リストされている最初のバインディングは である必要がありますvalue。これを展開します。ポップアップ メニューから、バインド先のオブジェクトとして [ファイルの所有者] を選択します。Xcode がself[モデル キー パス] フィールドに入力します.colorSpaceName。フィールドの末尾に追加して、Return キーを押します。

本当にコードでバインディングを行う必要がある場合は、に変更@"stringValue"@"value"て、アウトレットが IB に接続されていることを確認してください。

注: コードで UI を作成している場合、要素を as として宣言する必要はありません。これは、IBOutletIBIBActionが注意を払うべきプロパティとメソッドを知るための単なるキーワードです。

于 2013-10-07T18:34:31.720 に答える