2015-10-16 56 views
4

我想知道在手錶和iOS設備上的WCSession對象上的什麼時候會調用activateSession()。什麼時候調用WCSession對象的activateSession()

在它說的文檔:

始終指定一個代表和調用任何會話相關的方法之前,激活您的會話。會話必須在發送消息或獲取有關連接狀態的信息之前進行配置和激活。

在第一個想到的,我把我的代碼初始化會話:上表側

if (WCSession.isSupported()) { 
     session = WCSession.defaultSession() 
     session.delegate = self 
     session.activateSession() 
    } 

iOS設備上的viewDidLoadwillActivate

它的工作原理...但我不認爲這是一個很好的解決方案。 我對應用程序生命週期還不太熟悉,但據我瞭解,每次打開應用程序時都會調用這些應用程序。

每次打開其中一個應用程序時,是否會導致「重新連接」?

哪裏可以放置該代碼的好地方?

回答

10

當你把viewDidLoadwillActivateWCSession代碼它的應用程序打開時不僅調用,但每次顯示包含代碼視圖控制器。所以這不是一個理想的地方。

把這個代碼的最佳位置是在application:didFinishLaunchingWithOptions應用程式的AppDelegate並在applicationDidFinishLaunching手錶擴展的ExtensionDelegate

你可以把所有的會話處理成一個單獨的類,在這個偉大的tutorial通過@NatashaTheRobot建議。

這樣會話只會在應用程序被保存在內存中時創建一次。

編輯

由於ccjensen在他的評論中指出的那樣,如果你正在使用一個併發症通知一覽更新必須激活在ExtensionDelegate的init方法的會話的連接。在這些情況下將不會調用applicationDidFinishLaunching

+5

實際上,ExtensionDelegate的applicationDidFinishLaunching僅在WatchKit應用程序啓動時調用。當擴展程序正在啓動併發症,通知或瀏覽更新時,它不會被調用。 ExtensionDelegate的init方法是一個更好的地方,因爲它將在所有這些其他情況下被調用。 – ccjensen

+0

哦,是的,你完全正確!謝謝你指出,我沒有想那麼遠。我更新了我的答案。 – joern

相關問題