2016-01-04 79 views
0

我在使用WatchOS 2.1和iOS 9上的WatchConnectivity框架時遇到了麻煩。 我正在使用transferUserInfo()將數據從iOS應用程序發送到Watch,並且工作正常。問題在於:當我在用戶按下手錶視圖中的按鈕後嘗試發送更新時,通信只能偶爾進行。例如,它通常第一次工作,其他時間看起來像是消息丟失。 我試過不同的解決方案(sendMessage,updateContext,ecc),但我總是遇到同樣的問題。誰能幫我? 下面的代碼:WatchConnectivity偶爾會工作

//在觀察側:

@IBAction func completeButtonPressed() { 

     if let index = isActivityTitled(activityTitle, inArray: todayActivities) { 
      activityCompleted = !activityCompleted 
      todayActivities[index].completed = activityCompleted 
     } 
     if self.activityCompleted == false { 
      self.completeButton.setBackgroundImage(UIImage(named: "completedButton")) 
      self.completeButton.setTitle("COMPLETA") 
     } else { 
      self.completeButton.setBackgroundImage(UIImage(named: "rectButtonGray")) 
      self.completeButton.setTitle("COMPLETATO") 
     } 
     if self.session != nil { 
      session.transferUserInfo(["WatchUpdatedActivityTitle":self.activityTitle]) 
     } 
    } 

//在iOS方面:(我處理在AppDelegate的回調)

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) { 
     print("Message From Watch:") 
     print(userInfo["WatchUpdatedActivityTitle"]) 

     if let actTitle = userInfo["WatchUpdatedActivityTitle"] { 
      self.activitiesList = ActivitiesList.sharedActivitiesList 

      let updatedActivity = self.activitiesList.getActivityTitled(actTitle as! String) 
      if updatedActivity?.completed == false { 
       updatedActivity?.completed! = true 
      } else { 
       updatedActivity?.completed! = false 
      } 
      self.activitiesList.updateActivity(updatedActivity!, withReorder: true) 
      dispatch_async(dispatch_get_main_queue()) { 
       NSNotificationCenter.defaultCenter().postNotificationName("reloadTableViews", object: nil) 
      } 
     } 
    } 

希望能解決問題很快, 非常感謝。

+0

聲音就像在操作系統中可能存在一個錯誤。可能最好向Apple提交一份附帶示例項目的bug報告。很好,如果你可以在這裏報告雷達號碼! – ccjensen

+0

您是否在watch os端進行了調試,並確定'session.transferUserInfo'實際上被調用了嗎?你確定self.activityTitle不是零嗎? –

回答

1

我有類似的問題,我認爲它可能是與WCSession的東西。嘗試在使用前重新創建completeButtonPressed中的會話變量。

self.session = ... //initialize the session again 
if self.session != nil { 
+0

感謝您的回答,但並未解決問題。 –

0

https://forums.developer.apple.com/thread/43596

目前存在用於watchOS 2.2和iOS 9.3一個問題,即使用方法transferUserInfo將數據發送到協議方法

  • (無效)會話:(WCSession *)會話didReceiveUserInfo :(NSDictionary *)userInfo

將在一開始工作,那麼它將停止工作。

當它停止工作時,在我重新啓動iPhone和Apple Watch後,我確實再次使用它。

此外,請確保您的會話具有較強財產的成員變量:

@interface InterfaceController() <WCSessionDelegate> 
@property (strong, nonatomic) WCSession *session; 
@end 

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

另一個則需要提防的是利用主隊列來更新你的UI:

- (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *, id> *)userInfo { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSLog(@"InterfaceController.m ------------ (watch received: %@)----------------", userInfo); 
     [self.descriptionLabel setText:userInfo[@"emojiDescription"]]; 
    }); 
}