Cocoa 重写setter时的双向绑定
我有一个绑定到某个对象“缩放”属性的NSTextField 在这个对象的类实现中,我有以下几点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在代码中,文本字段将正确显
- (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调用。这意味着它不起作用。