0

編集可能に設定された NSImageView があります。ユーザーが画像を削除したときに、デフォルトの画像に戻せるようにしたいと考えています。セッターで NSImageView がバインドされている値を変更しようとしましたが、後でゲッターが呼び出されないため、バインドされた値が別の画像に設定されているにもかかわらず、NSImageView は空白です。セッターコードは次のとおりです。

-(void)setCurrentDeviceIcon:(NSImage *)newIcon {
    [self willChangeValueForKey:@"currentDeviceIcon"];
    if(newIcon == nil)
        newIcon = [currentDevice defaultHeadsetIcon];
    currentDeviceIcon = newIcon;
    [self setDeviceChangesMade:YES];
    [self didChangeValueForKey:@"currentDeviceIcon"];   
}

NSImageView の値を更新するにはどうすればよいですか?

4

2 に答える 2

0

NSImageview 例としてセレクターを使用できる理由

-(IBAction)setImage:(id)sender
{
    NSString *icon_path = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle]resourcePath],@"default_icon.png"];
    NSData *imgdata = [NSData dataWithContentsOfFile:icon_path];
    [[[self NSArrayController] selection] setValue:imgdata forKeyPath:@"currentDeviceIcon"];
}

これNSArrayControllerがアレイ コントローラ名です。

于 2012-12-03T11:32:59.943 に答える
0

willChangeValueForKey:セッター メソッド内で自分自身とdidChangeValueForKey:メッセージを送信する必要はありません。何かがcurrentDeviceIconプロパティの監視を開始すると、KVO は setter メソッドをラップして、何かがオブジェクトにsetCurrentDeviceIcon:メッセージを送信するたびに、これらの通知を自動的に送信します。

したがって、メソッドは次のようになります。

-(void)setCurrentDeviceIcon:(NSImage *)newIcon {
    if(newIcon == nil)
        newIcon = [currentDevice defaultHeadsetIcon];
    currentDeviceIcon = newIcon;
    [self setDeviceChangesMade:YES];
}

次に、このオブジェクトsetCurrentDeviceIcon:メッセージを送信して、プロパティの値を変更する必要があります。このメソッドとorcurrentDeviceIconを除いて、インスタンス変数に直接代入しないでください(後者の 2 つは通常、他のメッセージを自分自身に送信しないでください)。initdealloc

それがうまくいかない場合は、画像ビューがバインドされていないか、間違ったオブジェクトにバインドされています。どうやって縛ってるの?Bindings インスペクターのコード/スクリーンショットを投稿できますか?

于 2010-06-15T13:13:33.817 に答える