Cocoa 通过控件编辑NSImageView时更改其值
我有一个NSImageView,它被设置为可编辑。我想能够恢复到默认图像时,用户删除图像。我已尝试在setter中更改NSImageView绑定到的值,但之后不会调用getter,因此NSImageView为空,尽管绑定值被设置为另一个图像。下面是setter代码:Cocoa 通过控件编辑NSImageView时更改其值,cocoa,nsimageview,Cocoa,Nsimageview,我有一个NSImageView,它被设置为可编辑。我想能够恢复到默认图像时,用户删除图像。我已尝试在setter中更改NSImageView绑定到的值,但之后不会调用getter,因此NSImageView为空,尽管绑定值被设置为另一个图像。下面是setter代码: -(void)setCurrentDeviceIcon:(NSImage *)newIcon { [self willChangeValueForKey:@"currentDeviceIcon"]; if(newIc
-(void)setCurrentDeviceIcon:(NSImage *)newIcon {
[self willChangeValueForKey:@"currentDeviceIcon"];
if(newIcon == nil)
newIcon = [currentDevice defaultHeadsetIcon];
currentDeviceIcon = newIcon;
[self setDeviceChangesMade:YES];
[self didChangeValueForKey:@"currentDeviceIcon"];
}
我应该如何使NSImageView更新其值?您不需要在setter方法中发送自己的
willChangeValueForKey:
和didChangeValueForKey:
消息。当某个对象开始观察您的currentDeviceIcon
属性时,KVO包装您的setter方法,以便在某个对象向您发送setCurrentDeviceIcon:
消息时自动发布这些通知
因此,该方法应如下所示:
-(void)setCurrentDeviceIcon:(NSImage *)newIcon {
if(newIcon == nil)
newIcon = [currentDevice defaultHeadsetIcon];
currentDeviceIcon = newIcon;
[self setDeviceChangesMade:YES];
}
然后您需要发送此对象setCurrentDeviceIcon:
消息来更改属性的值。除了此方法和init
或dealloc
(在后两种情况下,您通常不应向自己发送任何其他消息),不要直接分配给currentDeviceIcon
实例变量
如果这不适用于您,则可能是图像视图未绑定,或者它绑定到了错误的对象。你是怎么装订的?您可以发布绑定检查器的代码/屏幕截图吗?为什么您可以使用选择器查看
NSImageview
范例
这里
NSArrayController
是您的阵列控制器名称。对,这似乎仍然不起作用。我非常确定绑定是好的(SS附加到原始帖子以防万一)。我想我可能有点不清楚-当通过控制器更改图像时,控件工作得很好,这是因为nsimageview允许用户在聚焦时按delete键,并且图像将设置为nil。程序会调用setter,但不会调用getter。哦,我明白了。很抱歉我的误解。
-(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"];
}