2017-01-04 11 views
0

Apple WatchからiPhoneにStringを渡そうとしていますが、接続していないようです。ここに私のコードは次のとおりです。Apple WatchがiPhoneにデータを渡していない - Swift

ViewController.swift:

import UIKit 
import WatchConnectivity 

class ViewController: UIViewController, WCSessionDelegate { 

    @IBOutlet weak var lablel: UILabel! 
    var string = "Hello World" 
    let session = WCSession.default() 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     session.delegate = self 
     session.activate() 

    } 


    func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { 
     let msg = message["StringValueSentFromiWatch"] as! String 
     lablel.text = "Message : \(msg)" 

     print("iphone recieved message") 
    } 

    func session(_ session: WCSession, 
       activationDidCompleteWith activationState: WCSessionActivationState, 
       error: Error?) { 

    } 

    func sessionDidBecomeInactive(_ session: WCSession) { 

    } 

    func sessionDidDeactivate(_ session: WCSession) { 

    } 
} 

InterfaceController.swift:

import WatchKit 
import Foundation 
import WatchConnectivity 


class InterfaceController: WKInterfaceController, WCSessionDelegate { 

    let session = WCSession.default() 

    override func willActivate() { 
     super.willActivate() 

     session.delegate = self 
     session.activate() 
    } 

    @IBAction func SendPressed() { 

     //Send Data to iOS 
     let msg = ["StringValueSentFromiWatch" : "Hello World"] 
     session.sendMessage(msg, replyHandler: { (replay) -> Void in 
      print("apple watch sent") 
     }) { (error) -> Void in 
     print("apple watch sent error") 
     } 

    } 

    func session(_ session: WCSession, 
       activationDidCompleteWith activationState: WCSessionActivationState, 
       error: Error?){ 
    } 

} 

は、私がiPhoneに "Hello Worldの" を送信しようとしているが、私はこのプリントアウトを取得しますコンソール:

のErrorHandler:YES WCErrorCodePayloadUnsupportedTypesと

と 'apple watch sent error'です。

私はそれが送信されないことを知っていますが、私は理由を知らない。誰もがなぜこれがうまくいかないか知っていますか?

注:私はこれをシミュレータで実行していますが、これは問題ではないと確信しています。

答えて

1

私はあなたがsendMessage()でうんざりしていると思いますが、私はreplyHandler構文を使いこなすことができず、errorHandler:パラメータが不足しています。

とにかく、あなたのコードを試してみましたが、いくつかの変更を加えればうまくいくはずです。

1)。 InterfaceController、sendPressed()で:あなたは今の行のボタンを数回押すことができるようにメッセージが、(バッテリーを節約するために)各コールのために変化しなければならないので、

var count = 0  
@IBAction func SendPressed() { 
    //Send Data to iOS 
    let msg = ["Count" : "\(count)"] 

    if session.isReachable { 
     session.sendMessage(msg, replyHandler: nil, errorHandler: { (error) -> Void in 
      print("Error handler: \(error)") 
     }) 
     count += 1 
    } 
} 

私は、数を追加しました。ホストアプリケーションが到達可能であることを確認するチェック。 ViewControllerで

2)、メインスレッド上でGUIを更新することを忘れないでください:あなたは、データを受信したときにそれ以外の場合はラベルが更新されません

func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { 
    DispatchQueue.main.async { 
     self.lablel.text = "Message : \(message)" 
    } 
} 

私があなたを助けるかどうか教えてください!

+0

私はこの行を保持しなければなりませんでした:msg = message ["Test"]を! String –

+0

メッセージをソートするためにifステートメントを使用するには、msg == "App1" {を使用します。再度、感謝します! –

関連する問題