让人闹心的WatchConnectivity

最近开发一款手表项目,需要手机手表通信。选择WatchConnectivity来实现功能。以前也没研究过,于是先来个demo学习一下。

最先让本同学上火(可能还没到闹心的地步)的,是使用模拟器运行代码,发现手机手表就不能通讯。手机发的消息,手表看不到,手表发的,手机也收不着。这就比较烦了,于是baidu、biying、google一串下来发现必须用真机调试。真机运行下,果然可以。

Demo可以了,结合自己的业务搞起,自定义了数据对象,传输自定义对象列表balabala……然后悲剧了。wcSession.sendMessage中message类型是[String :Any],不能传递自定义类型数据。

所以只能将查询的自定义对象列表转换成对应的数据格式进行发送。至此,勉强的把数据组装起来,传递到手表端,手表端也不负众望的能接收数据并且显示出来。可刚要绽放的笑容瞬间又消失啦啦啦,那个啥……字典是无序的,显示的内容每次都变着法的气人,原本可能有点上火,现在就是闹心啦。大神们别喷,毕竟学习语法时记得,实践的时候那么不巧的忘了。然后,换了种写法,愉快的搞定了。晚饭加了个鸡腿(裂开腮帮子那叫一个痛快,哈哈)

调试没啥问题愉快的封板。然后ios有版本更新,watch也有更新提示,更吧。没想到闹心的来了。“WCSession WCErrorCodeNotReachable”,去论坛一顿查阅,也没见个解决的,郁闷ing,想着是不是自己写的代码太差,这里是不是替换成单例,那里是不是要单独封装……各种改代码,然后过了好久郁闷了好久,又有版本更新啦,更完了,问题没了,用最初封板的代码,一点都没改过的版本,运行良好。

以为这样就结束了,那就too young了,哪里听说过ios不更新啦!!!后面又有各种更新,同学的代码也是今天可以运行,下个更新版本可能就不行,所以我决定彻底解决一下这个问题。顺便插一句,昨天打了第二针新冠疫苗,那叫一个困呀,就困成狗的情况下我还想是哪里的问题。我又搞了个demo,不加业务,纯测试。

1、尝试从手表给手机发message,不需要应答数据的那种,每次都成功。

代码如下:

//watch

let message = ["message":"hello phone"]

        wcSession.sendMessage(message, replyHandler:nil) { errorin

            print(error.localizedDescription)

        }

//phone

funcsession(_session:WCSession, didReceiveMessage message: [String:Any]) {

       print("message:\(message)")

    }

2、尝试手表给手机发message,需要应答数据的那种,每次都失败。

代码如下:

//watch

letmessage = ["query":true]

        wcSession.sendMessage(message) { replyin

            letdata = reply["data"]as!String

            print("watch reply data:\(data)")

            DispatchQueue.main.async{ [self]in

                self.showMessageLabel.setText(data)

            }

        } errorHandler: { errorin

            print(error.localizedDescription)

        }

//phone

funcsession(_session:WCSession, didReceiveMessage message: [String:Any], replyHandler:@escaping([String:Any]) ->Void) {

        varreply = [String:Any]()

        reply["data"] = ["hi watch, nice to see you."]

        print("reply:\(reply)")

        replyHandler(reply)

    }

既然不带应答的每次都成功,我就用这种方式发起请求,然后让手机收到消息后send message给手表是不是也行,然后……意料之中的失败了。后来又尝试了网友们说的updateApplicationContext,一样的失败。但是我发现手表给手机发消息,总是成功的,而手机给手表发总是失败的,代码中我也判断了session的activationState总是activated的,session的isReachable一直是true的。

能想到的都尝试了,于是我去论坛发表了问题。


但是也没人给回复ing

最后看见了这篇文章,感觉那叫一个亲切


下面有很多跟我遇到一样问题的人在跟进,但是也都没解决。看到最后,我似乎也释怀了,应该跟实现代码没太大关系,可能是苹果更新中,对WatchConnectivity修改了什么,这也只是我的猜测。

最后真心的要吐槽一下,app都要上架了,然后就这一更新用户就用不了,闹心……

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容