2015-08-22 52 views
3

我對7.0版公測5 運行WatchOS 2.0我正在用IWATCH應用的iOS。WatchOS 2.0:WCSessionDelegate不會被調用(在模擬器)

我如圖所示設置了目標。

enter image description here

我有我的iOS的視圖控制器和WatchKitExtension的接口控制器都開啓WCSession並設置爲代表。

if ([WCSession isSupported]) { 
    WCSession *session = [WCSession defaultSession]; 
    session.delegate = self; 
    [session activateSession]; 
    NSLog(@"iOS App WCSession is supported"); 
} 

然後我試圖從觀看發送用戶信息到iOS:

NSDictionary *userInfo = [[NSDictionary alloc]initWithObjectsAndKeys:@"testingURL", @"outputURL", nil]; 
     [[WCSession defaultSession] transferUserInfo:userInfo]; 

但我的視圖控制器的委託方法永遠不會叫:

- (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo{ 

dispatch_async(dispatch_get_main_queue(), ^{ 
    NSLog(@"Received userInfo Transferr"); 
    NSLog(@"%@", userInfo); 
    [self.label setText:@"Received"]; 
}); 
} 

我當時正在監視應用程序和iOS在一起從模擬器通過該方案在這裏按運行:

enter image description here

誰能告訴我我做了什麼錯?

+0

我看不到任何明顯的錯誤。我會建議向蘋果提交一個bug(包括你的測試項目),並在這裏報告雷達號碼,以便任何細讀的蘋果工程師都能快速追蹤到它! – ccjensen

回答

3

一般來說,這不是一個好主意,在一個UIViewController接收WCSession數據,因爲你永遠不能確定它是否是有或沒有。

蘋果說你應該儘快開始接收。您的UIApplicationDelegate是從WCSession接收數據的好地方,也是儘早設置它的好地方。

編輯

您還沒有抱上表側的基準您激活會話。這意味着Apple可以刪除所有會話資源。

所以你defaultSession下一個電話讓你一個新鮮的未激活的會話。

編輯2

以我的經驗,你必須做兩件事情測試WatchApp擴展和iOS應用程序之間的通信時:

  1. 開始在Xcode 7 WatchApp(有時我不得不這樣做兩次)
  2. 進入iPhone模擬器和手動啓動您的iOS應用

有可能b更多的方式來確保運行和溝通。

也嘗試從iOS應用程序發送消息到您的WatchApp擴展,這對我有用。

+0

感謝Gerd的建議。我將WCSessionDelegate移動到AppDelegate,但仍然沒有調用AppDelegate中的ReceiveUserInfo。任何其他想法? – John

+0

在手錶方面,您在發送之前再次獲得(另一個?)defaultSession。您不使用記住的激活的會話實例。這可能是也可能不是問題。當您再次調用defaultSession時,Apple可能會或可能不會做任何事情。 –

+0

當您沒有對會話進行引用時,運行時系統可能會刪除所有資源。所以你的會話沒有被激活,這是一個新的。 –

0

對於我來說,當我停止在手錶或iOS應用程序上接收發送事件時,我只需關閉兩個模擬器並讓XCode再次啓動它們。他們似乎進入了一個狀態。我從來沒有在實際的手錶或iOS設備上發生過這種情況。

相關問題