我在微控制器中为大学课做UI。它是用于控制不同房间温度的温度控制器的用户界面。对于每个房间,我有一个RoomViewController(一个NSViewController子类)的实例,它管理一个相应的视图,显示当前的温度和目标温度,可由用户更改。
我的目的是使用Cocoa绑定将目标临时显示的值绑定到RoomViewController中的属性,然后让另一个类侦听这些属性,以通过串行将这些更新发送到微控制器。问题是,更改也可能来自微控制器,这意味着我必须以编程方式设置属性,因为来自微控制器的事件。这将导致属性更改通知,从而导致更改MCU中的值,这将导致来自MCU的事件,这将导致属性更改等等。它会变成无限循环。
如何在KVO中阻止此类反馈循环?
答案 0 :(得分:0)
测试(你说这是大学课程!):
a)将属性设置为当前值会导致KVO更改通知吗?
b)如果你没有改变你的财产,如果新的价值相同,那么从MCU收到一个事件会不会影响你的周期?
c)想想你可以做的另一项测试!
评论回复
我假设你已经测试了(a)& (b)并发现他们并不完全符合您的要求。那么也许你所追求的是一个拥有两个二人的单一财产?一个setter触发KVO而另一个没有......
现在你在谈论温度,所以你的财产可能是一些数字类型。它是一个包装数字,如NSNumber
,还是原始数字,如double
?
让我们假设后者,因为前者(更多)涉及更多!
所以:
double
属性。@syntheize
属性让编译器创建一个setter和一个getter来改变/检索该实例变量中的值。问题解决了。 OK?