È possibile utilizzare l'incorporato in WatchConnectivity quadro per inviare messaggi da iOS app per l'Apple Osservare abbinato.
1) in primo luogo, attivare orologio sessione di connettività sia in iOS ed estensione WatchKit. Sul lato iOS può essere fatto in application didFinishLaunchingWithOptions
del delegato dell'app. Sul lato orologio è possibile eseguire questo codice nel metodo applicationDidFinishLaunching
del delegato di estensione WatchKit.
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
2) Ora invia un messaggio dalla tua app iOS.
let session = WCSession.defaultSession()
session.sendMessage(["message from iOS app":""], replyHandler: { reply in
// Handle reply from watch (optional)
}, errorHandler: nil)
3) ricevere il messaggio nel proprio interno WatchKit implementando il metodo session didReceiveMessage
nella classe WCSessionDelegate
delegato.
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])
}
}
Alla ricezione del messaggio da iOS stiamo inviando una notifica con postNotificationName
metodo.
4) Abbonarsi a questa notifica nel proprio InterfaceController che richiede l'aggiornamento (o in qualsiasi altro luogo in cui si desidera ricevere questa notifica di aggiornamento).
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) Infine, implementare il metodo del gestore di notifica. Qui è dove puoi aggiornare la tua interfaccia utente.
func didReceiveReloadNotification(notification: NSNotification) {
let userInfo = notification.userInfo as? [String: String]
if let userInfo = userInfo, data = userInfo["data"] {
// Update UI
}
}
Nota: per il bene di leggibilità Sto usando stringa di testo in linea per il "messaggio da iOS app" messaggio chiave nome di notifica "myapp.reload" e. Ma nell'app reale è meglio usare le proprietà per queste stringhe di testo per evitare errori di battitura.
Ottima risposta! Tuttavia, vorrei aggiungere che questo non è documentato come supportato. Questo potrebbe essere prevenuto in futuro o potrebbe non passare la certificazione Apple quando iniziano ad accettare app di watchkit. Anche se, per ora funziona splendidamente! –