2015-01-09 4 views
5

Wir können die Methode openParentApplication:reply: in der übergeordneten iOS-App über die Watch Kit-Erweiterung aufrufen.So rufen Sie die Methode in der Watchkit-Erweiterung von der übergeordneten iOS-App auf

Gibt es aber eine Möglichkeit, die Methode in der Watchkit-Erweiterung von der übergeordneten iOS-App aufzurufen?

Zum Beispiel: In meiner App, wenn Benutzer Ereignis in der ios app hinzufügen, dann sollte auch die watchkit Ereignisliste aktualisiert werden, so dass ich die Aktualisierungsmethode in der watchkit Erweiterung aufrufen muss, wenn der Benutzer ein neues Ereignis in der Hauptanwendung hinzufügt.

Bitte helfen.

Danke.

Antwort

4

Sie können nicht direkt eine Methode aus watchkit Nebenstelle anrufen, aber Sie können nach recieving es ein Darwin-Mitteilung (oder verwenden Sie MMWormhole Bibliothek (here), und führen Sie die richtige Methode senden.

+0

Große Antwort! Ich möchte jedoch hinzufügen, dass dies nicht als unterstützt dokumentiert ist. Dies kann in Zukunft verhindert werden oder es wird möglicherweise keine Apple-Zertifizierung bestehen, wenn sie Watchkit-Apps akzeptieren. Obwohl es jetzt prächtig funktioniert! –

1

Sie den eingebauten verwenden können in WatchConnectivity Rahmen Nachricht von iOS-App auf das gekoppelte Apple Watch zu senden.

1) Zuerst Uhr Konnektivität Sitzung sowohl in iOS App und WatchKit Erweiterung aktivieren. Auf der iOS-Seite kann es in application didFinishLaunchingWithOptions des App-Delegate erfolgen. Auf der Watch-Seite können Sie diesen Code in applicationDidFinishLaunching Methode der WatchKit-Erweiterung Delegate ausführen.

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

2) Senden Sie jetzt eine Nachricht von Ihrer iOS App.

let session = WCSession.defaultSession() 

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

3) Erhalten Sie die Nachricht in Ihrem WatchKit Erweiterung durch die session didReceiveMessage Methode in Ihrer WCSessionDelegate Delegierten Klasse implementieren.

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

Nach Erhalt der Nachricht von iOS empfangen wir eine Benachrichtigung mit postNotificationName Methode senden.

4) Abonnieren Sie diese Benachrichtigung in Ihrem InterfaceController, die aktualisiert werden muss (oder an einem anderen Ort, an dem Sie diese Updatebenachrichtigung erhalten möchten).

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) Schließlich implementieren Sie die Benachrichtigungs-Handler-Methode. Hier können Sie Ihre Benutzeroberfläche aktualisieren.

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

Hinweis: Aus Gründen der Lesbarkeit Ich bin mit Inline-Textzeichenfolge für die Benachrichtigung Namen „myapp.reload“ und die Nachrichten-Taste „Nachricht von iOS-App“. Aber in der echten App ist es besser, Eigenschaften für diese Textzeichenfolgen zu verwenden, um Tippfehler zu vermeiden.

Verwandte Themen