2016-05-09 5 views
0

schlafen Ich implementiere einfache One-Line-Kommunikation zwischen iOS App und WatchKit mit SendMessage.iOS-App wird nach 1 Minute der Kommunikation mit Watch WatchKit

Das Problem ist - die Kommunikation ist kontinuierlich. Der Benutzer drückt eine Taste auf AppleWatch, die gleiche Aktion passiert auf Telefon e.t.c. Leider, nach zwei oder drei Aktionen - die iOS App reagiert nicht mehr. Wie von einigen in den Foren empfohlen - ich habe implementiert backgroundTaskWithExpirationHandler, funktioniert es jedoch nicht (gibt mir nicht einmal eine versprochene drei Minuten Timeout).

Hier ist mein Code in der iOS-App AppDelegate

func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) { 
     //recieve messages from watch 
     print(message["b"]! as? String) 
     let sweetN = message["b"]! as? String 
     //var sweetB = message["abs"]! as? [Int : Bool] 
     dispatch_async(dispatch_get_main_queue(), { 
      let taskID = self.beginBackgroundUpdateTask() 
      if sweetN == "peeks"{ 
       if WCSession.isSupported(){ 
        let message = [ "gettingData": "datareceived" ] 
        session.sendMessage(message, replyHandler: { replyDict in }, errorHandler: { error in }) 
       } 
      } 
      self.endBackgroundUpdateTask(taskID) 
     }) 
    } 
    func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier { 
     return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({}) 
    } 
    func endBackgroundUpdateTask(taskID: UIBackgroundTaskIdentifier) { 
     UIApplication.sharedApplication().endBackgroundTask(taskID) 
    } 

Antwort

0

Das ist für mich gearbeitet. Sie haben die WCSession im AppDelegate setzen wie:

func Anwendung (Anwendung: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: ANYOBJECT]?) -> Bool {

if WCSession.isSupported() { 
     let session = WCSession.defaultSession() 
     session.delegate = self 
     session.activateSession() 
    } 

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) { 
    replyHandler(["message": "received!"]) 
} 

und in den Apfel Uhr : Die Dateierweiterung delegate.swift macht das gleiche:

override init() { 

    if WCSession.isSupported() { 
     let session = WCSession.defaultSession() 
     session.delegate = self 
     session.activateSession() 
    } 
} 
Verwandte Themen