2015-10-27 47 views
0

在我的小經驗中,我注意到爲WatchKit應用程序創建兩個或多個接口控制器(IC),AppleWatch在用戶滑動到它之前開始加載下一個接口。這對於系統性能可能很有用,但是這會讓我感到困惑。 對於我所瞭解的每個IC應該有自己的WCSession與配對的iPhone進行通信,但我開始認爲這是不正確的,因爲調試我看到,如果例如第一個IC使用sendMessage發送請求,答案由第二IC的didReceiveMessage接收,而不是第一IC。 我還沒有嘗試過,但也許我應該只在第一個IC中創建WCSession,並且如果我在另一個IC上,應用程序會在第一個ICR的didReceiveMessage中激發它。如果這是正確的,當消息到達時,如何在第二個IC中做些什麼?在WatchKit中,我不認爲我可以使用Observers。 請問有人能澄清我嗎?Watchkit和WCSession

做了互聯網的一些更多的搜索,我發現這一點:http://www.sneakycrab.com/blog/2015/5/26/wkinterfacecontroller-lifecycle-in-watchos-101 這是關於IC的預緊力的確認,現在仍然是在WatchOS 2

回答

0

也同樣使用全球公共變量現在我能開啓正確的會話。

----- myVariables.swift ----- 
public var showPage1: Bool = false 

----- myMainIC.swift ----- 
override func willActivate() { 
    super.willActivate() 
    showPage1 = false 
} 

----- mySecondIC.swift ----- 
var session: WCSession? 
override func WillActivate() { 
    super.willActivate() 
    // this way I can manage the pre-load 
    if (showPage1 == false) { 
     showPage1 = true 
     return 
    } 
    // now I can create the session 
    if WCSession.isSupported() { 
     session = WCSession.defaultSession() 
     session.delegate = self 
     session.activateSession() 
    } 
} 

由於系統預載的上述文章中介紹的,我應該「教」的mySecondIC不創建會話中的頁面第一次是激活的原因是不可見的。

0

使用transferCurrentComplicationUserInfo 發送數據,並使用在 接收watchkit數據 - (無效)會話:(WCSession *)會話didReceiveUserInfo:(的NSDictionary *)USERINFO

方法。

1

您正在使用WCSession.defaultSession,這是很好的,和蘋果建議,但它意味着session點在兩個WKInterfaceControllers相同的對象,所以session.delegate = self設計設置會話的是代表哪個WKInterfaceController已加載(不顯示) 最近。正如你發現的那樣,WKInterfaceControllers經常在它們被特別需要之前加載 - 蘋果explicitly documents

解決此問題的正確方法是在每個WKInterfaceController的didAppear方法中設置會話代理,而不是在willActivate中。這將確保可見的接口控制器始終是當前的委託。