【问题标题】:Can you use KVO with Scripting Bridge您可以将 KVO 与 Scripting Bridge 一起使用吗
【发布时间】:2010-10-02 11:52:22
【问题描述】:

您可以将 KVO 与 Scripting Bridge 一起使用吗?

我想知道我是否可以为我的应用程序创建一个 Scripting Bridge 接口,并允许通过观察我的应用程序的 SB 命令之一返回的对象来通知客户端应用程序。

这可能吗?如果没有,有什么替代方案?

【问题讨论】:

    标签: objective-c cocoa key-value-observing scripting-bridge


    【解决方案1】:

    Scripting Bridge 对象只是向应用程序发送事件并获得回复的可可糖。如果您观察对象的属性,则不会向它发送任何消息,因此您不会向应用程序发送任何事件。在 Apple 事件系统中无法观察到某事——您可以发送事件并获得回复,仅此而已。

    做你想做的事情的唯一方法是轮询:每 x 秒向应用程序发送一个事件,询问当前状态。

    如果您尝试在 iTunes 中观察当前曲目或播放状态,那么仅此一项,您就不需要轮询,因为 iTunes 在当前曲目或播放状态时发布(未记录的)分布式通知变化。您可以使用Notification Watcher 来检查收到的通知,以便知道从中提取什么。

    【讨论】:

    • 当客户端应用程序观察到由 SB 命令返回的我的一个对象的键时,它会将自己注册为该键的观察者通过向其发送 addObserver 消息和当我的应用程序更改该键时,会通知所有观察者(通过向观察对象发送消息)。所以我不明白为什么这对 SB 不起作用。
    • AshleyS:因为你是改变价值的人。 KVO 包装了 setFoo: 方法,并在您调用它时发送 KVO 通知,就像它对应用程序中的任何其他对象所做的一样。当其他应用程序中的属性值发生更改时,这无济于事,因为这不会调用您应用程序中 SBObject 的任何方法。
    • 属性值在我的应用程序中更改,而不是客户端应用程序。
    • AshleyS:没错。这将导致 KVO 通知,因为 KVO 将 setter 方法包​​装在您的 SBObject 实例中。其他应用程序中的值更改不会导致 KVO 通知,因为这不会向您的 SBObject 发送 setter 消息,也不会通过任何其他方式导致通知。
    • 我现在明白了。谢谢彼得。
    【解决方案2】:

    我为关心我问题的任何人找到了一个名为 Distributed Objects 的替代解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2020-11-23
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多