Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 重写setter时的双向绑定_Cocoa_Properties_Key Value Observing - Fatal编程技术网

Cocoa 重写setter时的双向绑定

Cocoa 重写setter时的双向绑定,cocoa,properties,key-value-observing,Cocoa,Properties,Key Value Observing,我有一个绑定到某个对象“缩放”属性的NSTextField 在这个对象的类实现中,我有以下几点 - (void)setZoom:(CGFloat)zoom { _zoom = MAX(0, MIN(10, zoom)); } 如果我在文本字段中写入“-5”,则将使用“-5”作为参数调用setZoom:,并且_zoom将设置为0 然后问题是textfield并没有更新自身,它显示“-5”,而不是重新读取刚刚设置的属性值 如果我做了myObject.zoom=-5在代码中,文本字段将正确显

我有一个绑定到某个对象“缩放”属性的NSTextField

在这个对象的类实现中,我有以下几点

- (void)setZoom:(CGFloat)zoom
{
    _zoom = MAX(0, MIN(10, zoom));
}
如果我在文本字段中写入“-5”,则将使用“-5”作为参数调用
setZoom:
,并且_zoom将设置为0

然后问题是textfield并没有更新自身,它显示“-5”,而不是重新读取刚刚设置的属性值

如果我做了
myObject.zoom=-5在代码中,文本字段将正确显示0


我试图包装_zoom=。。。inside willChangeValueForKey/didChangeValueForKey调用,但没有更改任何内容。

您可以尝试以下方法:

- (void)setZoom:(CGFloat)zoom
{
    CGFloat corectedValue = MAX(0, MIN(10, zoom));
    if (zoom != corectedValue)
    {
        [self setZoom:correctedValue];
    } else {
        _zoom = zoom;
    }
}

您可以尝试这样做:

- (void)setZoom:(CGFloat)zoom
{
    CGFloat corectedValue = MAX(0, MIN(10, zoom));
    if (zoom != corectedValue)
    {
        [self setZoom:correctedValue];
    } else {
        _zoom = zoom;
    }
}

这与包装相同_zoom=。。。通过willChangeValueForKey/didChangeValueForKey调用。这意味着它不起作用。这与包装一样。。。通过willChangeValueForKey/didChangeValueForKey调用。这意味着它不起作用。