gpt4 book ai didi

cocoa - 如何防止递归 KVO 通知?

转载 作者:行者123 更新时间:2023-12-03 17:24:47 27 4
gpt4 key购买 nike

我正在为大学微 Controller 类(class)制作 UI。它是温度 Controller 的用户界面,用于控制不同房间的温度。对于每个房间,我都有一个 RoomViewController (NSViewController 子类)的实例,它管理相应的 View ,该 View 显示当前温度和用户可以更改的目标温度。

我的目的是使用 Cocoa 绑定(bind)将目标临时显示的值绑定(bind)到 RoomViewController 中的属性,然后让另一个类监听这些属性以通过串行将这些更新发送到微 Controller 。问题是,更改也可能来自微 Controller ,这意味着由于来自微 Controller 的事件,我必须以编程方式设置属性。这将导致属性更改通知,从而导致 MCU 中的值发生更改,从而导致来自 MCU 的事件,从而导致属性更改等。它会变成无限循环。

如何防止 KVO 中出现这种反馈循环?

最佳答案

测试(你说这是大学类(class)!):

a) 将属性设置为其当前值是否会导致 KVO 更改通知?

b) 在从 MCU 接收事件时,如果您不更改属性,如果新值相同,这会破坏您的周期吗?

c) 想想你可以做的另一个测试!

评论回复

我假设您已经测试了 (a) 和 (b),并发现它们并没有完全满足您的要求。那么也许您想要的是带有两个 setter 的单一属性?一名二传手触发 KVO,另一名二传手则不会...

现在您正在谈论温度,因此您的属性可能是某种数字类型。它是一个包装数字,如 NSNumber 中,还是一个原始数字,如 double 中?

让我们假设后者,因为前者(很多)参与得更多!

所以:

  1. 您有一个数字属性,例如 double,由相同类型的实例变量支持。
  2. 您已 @syntheize 该属性让编译器创建一个 setter 和一个 getter,用于更改/检索该实例变量中的值。
  3. 您正在使用 KVO 来获取 setter 的用途。
  4. 并且您希望能够在不触发 KVO 的情况下设置属性。
  5. 对于原始数字属性,setter 需要做的就是设置实例变量...

问题已解决。可以吗?

关于cocoa - 如何防止递归 KVO 通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9715865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com