2015-04-06 24 views
0

WatchKit中的一个问题是从主应用程序到WatchKit扩展的通信。一些通过发送达尔文通知或与MMWormhole做的方法。如何通过存储“回复”块来在iOS应用程序和WatchKit扩展之间进行通信?

是否有可能通过将扩展程序发送给handleWatchKitExtensionRequest的回复块存储在属性上来执行此操作?例如:

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

然后,当应用程序想要将某些内容发送到扩展程序时,它会使用此易于使用的块。

如果扩展想要与主应用进行通信,它将发送一个新的应答块,该应答块将存储在该属性上。旧的将被使用并丢弃。

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

回答

1

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

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

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

+0

我会对这方面的更多细节非常感兴趣。在我的测试中,有一个挂起的回复块阻止了进一步的通信。 – SarahR 2015-04-07 04:27:55

+0

我仍在测试,但似乎您需要使用它们生成的相同顺序使用回复块。如果你使用的是更新的版本,它会一直等待直到旧版本发布。 – 2015-04-07 10:01:59

+0

这非常有趣。我从来没有注意到,这是发生在我建立我的系统的方式。我没有通过答复传递信息,而是通过MMWormhole。这使我能够监视数据更改并在单个工作流程中解析这些更改。如果我要在回复块中返回请求数据,那么我将不得不解析那里的数据,以及我正在监视MMWormhole通知的位置。它使得在单一地点处理所有事情变得更容易。缺点是我没有注意到订单的重要性。 – cnoon 2015-04-07 14:43:45

相关问题