0

我有一个设置为可编辑的 NSImageView。当用户删除图像时,我希望能够恢复为默认图像。我已经尝试更改 NSImageView 在 setter 中绑定的值,但之后不会调用 getter,因此 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

您不需要在 setter 方法中发送自己willChangeValueForKey:和消息。didChangeValueForKey:当有东西开始观察你的currentDeviceIcon属性时,KVO 会包装你的 setter 方法,以便在有东西向你的对象发送setCurrentDeviceIcon:消息时自动发布这些通知。

因此,该方法应如下所示:

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

然后你需要发送这个对象setCurrentDeviceIcon:消息来改变属性的值。不要直接赋值给currentDeviceIcon实例变量,除了在这个方法中和在initordealloc中(在后两者中,你通常不应该给自己发送任何其他消息)。

如果这对您不起作用,则您的图像视图未绑定,或者绑定到错误的对象。你是怎么绑定的?您可以发布绑定检查器的代码/屏幕截图吗?

于 2010-06-15T13:13:33.817 回答