0

WatchOS 2.1 および iOS 9 で WatchConnectivity フレームワークを使用すると問題が発生します。transferUserInfo() を使用して、iOS アプリから Watch にデータを送信していますが、動作します。問題は帰り道にあります。ユーザーがウォッチのビューでボタンを押した後に更新を送信しようとすると、通信がたまにしか機能しません。たとえば、通常、最初は機能し、それ以外の場合はメッセージが失われたように見えます。さまざまな解決策 (sendMessage、updateContext、ecc) を試しましたが、常に同じ問題が発生しています。誰でも私を助けることができますか?コードは次のとおりです。

//ウォッチ側:

 @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)
            }
        }
    }

問題がすぐに解決することを願って、どうもありがとうございました。

4

2 に答える 2

1

私は同様の問題を抱えていましたが、WCSession に何か問題があるのではないかと思います。completeButtonPressed使用する前に、でセッション変数を再作成してみてください。

self.session = ... //initialize the session again
if self.session != nil {
于 2016-01-04T21:41:36.403 に答える
0

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

現在、watchOS 2.2 および iOS 9.3 で、メソッド transferUserInfo を使用してデータをプロトコル メソッドに送信するという問題があります。

  • (void)session:(WCSession *)session 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];
}

もう 1 つ注意すべきことは、メイン キューを使用して 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"]];
    });
}
于 2016-04-19T02:43:34.397 に答える