如何通过存储 "reply" 块在 iOS 应用程序和 WatchKit 扩展之间进行通信?

How to communicate between an iOS app and the WatchKit extension by storing the "reply" block?

WatchKit 中的一个问题是从主应用程序到 WatchKit 扩展程序的通信。通过发送 Darwin 通知或 MMWormhole.

的一些方法

是否可以通过在 属性 上存储由分机发送至 handleWatchKitExtensionRequest 的回复块来实现?类似于:

@property (atomic,copy) void (^watchKitReply)(NSDictionary *);

然后,当应用想要向扩展程序发送内容时,它会使用这个随时可用的块。

如果扩展想要与主应用程序通信,它将发送一个新的回复块,该块将存储在 属性 上。旧的将被使用和丢弃。

如果不是,为什么这不可能?

你绝对可以做到这一点。我会小心,但不要每次都踩到你的 watchKitReply 属性 并创建一种不同的方式来允许多个 reply 对象。

我们在 Watch Extension/iOS 应用程序集成中所做的是创建一组 WatchKitRequest 请求。然后将每个回复块转发到执行请求实现的每个 WatchKitRequest 子类,然后 reply 块在完成时执行。本质上,我们完全按照您的建议进行操作,即存储 reply 块,直到您真正需要调用它为止。我们只是存储 reply 块,与您建议的有所不同。

这种方法对我们非常有效。希望这有助于让您朝着正确的方向前进。