2016-05-09 8 views
0

iOSアプリとwatchKitをsendMessageでシンプルに1行の通信を実装しています。iOSアプリがWatch-WatchKitとの通信が1分後にスリープ状態になる

問題は次のとおりです。 - 通信は継続的です。 ユーザーがappleWatchのボタンを押すと、Phone e.t.cで同じ操作が行われます。 残念ながら、2つか3つのアクションの後に - iOSアプリが応答を停止します。 フォーラムのいくつかでアドバイスされているように、私はbackgroundTaskWithExpirationHandlerを実装しましたが、動作しません(約束した3分のタイムアウトを与えません)。

はここ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) 
    } 

答えて

0

これは私のために働いたiOSアプリで私のコードです。 あなたが好きなアプリデリゲートにWCSessionを設定する必要があります。

FUNCアプリケーション(アプリケーション:のUIApplication、didFinishLaunchingWithOptionsのlaunchOptions:[NSObjectの:ANYOBJECT]?) - >ブール{

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!"]) 
} 

とリンゴの時計で:ファイル拡張子。delegate.swiftは同じ操作を行います。

関連する問題