ios - WCSession.sendMessage works 50/50 -


lately, working on project related watch/iphone communication again. code works , doesn’t work kind of weird me because think code should either work or not. cannot 50/50. therefore, have no idea goes wrong.

setup wcsession on iphone:

class watchcommunicationcontroller: nsobject, wcsessiondelegate {      var session : wcsession?      override init(){          //  super class init         super.init()          //  if wcsession supported         if wcsession.issupported() {    //  supported              //  default session             session = wcsession.defaultsession()              //  set delegate             session!.delegate = self              //  activate session             session!.activatesession()          } else {              print("iphone not support wcsession")         }     }      ... ... } 

similar wcsession setup on watch:

class phonecommunicationcontroller: nsobject, wcsessiondelegate {      var session : wcsession?      override init(){          //  super class init         super.init()          //  if wcsession supported         if wcsession.issupported() {    //  supported              //  default session             session = wcsession.defaultsession()              //  set delegate             session!.delegate = self              //  activate session             session!.activatesession()         } else {              print("watch not support wcsession")         }     }      ... ... } 

send out message on watch:

func sendgesture(gesture : gkgesture){

//  if wcsession reachable if session!.reachable {     //  reachable      //  create interactive message gesture     let message : [string : anyobject]     message = [                 "type":"gesture",                 "content":gesture.rawvalue               ]      //  send message     session!.sendmessage(message, replyhandler: nil, errorhandler: nil)     print("watch send gesture \(gesture)")  } else{                     //  not reachable      print("wcsession not reachable") } 

}

related enum:

enum gkgesture: int {     case push = 0, left, right, up, down } 

receive message on iphone:

func session(session: wcsession, didreceivemessage message: [string : anyobject]) {          //retrieve info         let type = message["type"] as! string         let content = message["content"]          switch type {          case "gesture":             handlegesture(gkgesture(rawvalue: content as! int)!)         default:             print("received message \(message) invalid type of \(type)")         }      }      func handlegesture(gesture : gkgesture){          print("iphone receives gesture \(gesture)")          var notificationname = ""          switch gesture {          case .up:             notificationname = "gestureup"         case .down:             notificationname = "gesturedown"         case .left:             notificationname = "gestureleft"         case .right:             notificationname = "gestureright"         case .push:             notificationname = "gesturepush"         }          nsnotificationcenter.defaultcenter().postnotificationname(notificationname, object: nil)      } 

somehow can’t debug watch app on xcode, debug session won’t attach. don’t know why. therefore, debug one-sided iphone.

sometimes got "receives gesture” print out, , not. , same getting notification.

i don't know if int wrapped around nsnumber while being transfer within wcsession. if be, must why when use int base class of enum won't work , works when string base class.

connectivity known issue app may crash when using nsnumber , nsdate objects wcsession api.

workaround: convert nsnumber or nsdate object string before calling wcsession apis. opposite conversion on receiving side.

watch os 2 beta 4 release note


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -