首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WatchConnectivity偶尔会起作用

WatchConnectivity偶尔会起作用
EN

Stack Overflow用户
提问于 2016-01-05 05:32:49
回答 2查看 175关注 0票数 0

我在WatchOS 2.1和iOS 9上使用WatchConnectivity框架时遇到了问题。我正在使用transferUserInfo()从iOS应用程序向手表发送数据,它工作了。问题是在返回的过程中:当用户在Watch上的视图中按下按钮后,当我尝试发送更新时,通信仅偶尔起作用。例如,它通常在第一次工作,而在所有其他时间,它似乎丢失了消息。我尝试过不同的解决方案(sendMessage、updateContext、ecc),但总是遇到相同的问题。有谁可以帮我?代码如下:

//在Watch端:

代码语言:javascript
复制
 @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中处理回调)

代码语言:javascript
复制
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)
            }
        }
    }

希望能尽快解决这个问题,非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2016-01-05 05:41:36

我也遇到过类似的问题,我想可能是WCSession的问题。在使用会话变量之前,请尝试在completeButtonPressed中重新创建它。

代码语言:javascript
复制
self.session = ... //initialize the session again
if self.session != nil {
票数 1
EN

Stack Overflow用户

发布于 2016-04-19 10:43:34

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

目前,watchOS 2.2和iOS 9.3存在使用方法transferUserInfo向协议方法发送数据的问题

  • (void)session:(WCSession *)会话didReceiveUserInfo:(NSDictionary *)userInfo

将在一开始工作,然后它将停止工作。

当它停止工作时,在我重启我的iPhone和苹果手表后,我确实让它重新工作了。

此外,请确保您的会话作为具有强属性的成员变量:

代码语言:javascript
复制
@interface InterfaceController() <WCSessionDelegate>
@property (strong, nonatomic) WCSession *session;
@end

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

另一个需要注意的是使用main queue来更新您的UI:

代码语言:javascript
复制
- (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"]];
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34600242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档