2015-01-09 12 views
5

parent ios appのメソッドopenParentApplication:reply:を時計キットの拡張から呼び出すことができます。parent ios appからwatchkit拡張のメソッドを呼び出す方法

しかし、parent iosアプリからwatchkit拡張のメソッドを呼び出す方法はありますか?

たとえば、私のアプリでは、ユーザーがiOSアプリケーションでイベントを追加するときにwatchkitイベントリストも更新する必要があります。メインアプリケーションで新しいイベントを追加するときにwatchkit拡張機能でrefreshメソッドを呼び出す必要があります。

助けてください。

ありがとうございました。

答えて

4

あなたは直接watchkit拡張子からメソッドを呼び出すことはできませんが、ダーウィンの通知を送信する(またはMMWormholeライブラリ(here)を使用することができ、それが供給した後、適切な方法を実行します。

+0

グレートアンサー!しかし、これは「サポートされています」と記載されていないと付け加えたいと思います。これは将来的には防止されるかもしれませんし、ウォッチキットのアプリケーションを受け入れる際にリンゴ認証に合格しないかもしれません。しかし、今のところそれは素晴らしい作品です! –

1

あなたは内蔵を使用することができますWatchConnectivity枠組みの中でペアアップルウォッチにiOSアプリからメッセージを送信します。

1)まず、時計の接続セッションiOSアプリとWatchKit拡張の両方を活性化させます。 iOS側では、アプリケーションデリゲートのapplication didFinishLaunchingWithOptionsで実行できます。ウォッチ側では、このコードをWatchKit拡張デリゲートのapplicationDidFinishLaunchingメソッドで実行できます。

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

2)あなたのiOSアプリからメッセージを送信してください。

let session = WCSession.defaultSession() 

session.sendMessage(["message from iOS app":""], replyHandler: { reply in 
    // Handle reply from watch (optional)  
}, errorHandler: nil) 

3)あなたのWCSessionDelegate委譲クラスでsession didReceiveMessageメソッドを実装することで、あなたのWatchKit拡張のメッセージを受信します。我々はpostNotificationName方法で通知を送信しているのiOSからメッセージを受信すると

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) { 
    if let message = message["message from iOS app"] { 
    NSNotificationCenter.defaultCenter().postNotificationName("myapp.reload", object: self, userInfo: ["data": message]) 
    } 
} 

4)更新が必要なInterfaceController(またはこの更新通知を受け取る他の場所)にこの通知を登録します。

override func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "didReceiveReloadNotification:", name: "myapp.reload", object: nil) 
} 

deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self, 
    name: "myapp.reload", object: nil) 
} 

5)最後に、通知ハンドラメソッドを実装します。ここでUIを更新できます。

func didReceiveReloadNotification(notification: NSNotification) { 
    let userInfo = notification.userInfo as? [String: String] 
    if let userInfo = userInfo, data = userInfo["data"] { 
    // Update UI 
    } 
} 

注:読みやすさのために、私は、「iOSアプリからのメッセージ」の通知名「myapp.reload」とメッセージキーのインラインテキスト文字列を使用しています。しかし、実際のアプリでは、これらのテキスト文字列にプロパティを使用して、誤植を避ける方がよいでしょう。

関連する問題