2015-04-06 55 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

相關問題