Così sto usando Guarda la connettività per richiedere una matrice da iPhone per l'orologio.errore: "Messaggio di risposta ha impiegato troppo tempo" - WCSession Guarda OS2
L'idea era di sendMessage
dall'orologio e l'iPhone risponderà con l'array all'interno del metodo didReceiveMessage
.
Tuttavia l'iPhone non sembra essere la risposta, ho pensato che l'iPhone avrebbe aperto l'applicazione quando invio il messaggio dall'orologio. Ho provato anche ad aprire l'applicazione quando ho sendMessage
ma ancora senza fortuna. Quando aspetto abbastanza a lungo ottengo il seguente messaggio di errore:
Error Domain=WCErrorDomain Code=7012 "Message reply took too long." UserInfo={NSLocalizedDescription=Message reply took too long., NSLocalizedFailureReason=Reply timeout occured.}
Qualcuno sa dove potrei aver sbagliato?
Apple Osservare uscite
import WatchKit
import Foundation
import CoreData
import WatchConnectivity
class BookmarkedInterfaceController: WKInterfaceController, WCSessionDelegate {
var session : WCSession!
var objects: [AnyObject]!
@IBOutlet var table: WKInterfaceTable!
override func willActivate() {
super.willActivate()
//Check if session is supported and Activate
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
sendMessageToIphone()
}
func sendMessageToIphone() {
if WCSession.defaultSession().reachable {
print("WCSession is reachabe")
let messageDict = ["Request": "iPhone Can You Give Me The Array"]
WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
print(replyDict)
}, errorHandler: { (error) -> Void in
print(error)
})
}
}
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
//recieving message from iphone
print("recieved message from iphone \(message)")
objects.append(message["Array"]!)
print("Objects array = \(objects)")
}
la console
WCSession is reachabe Array nil
iPhone App delegato viene eseguito
import UIKit
import CoreData
import WatchConnectivity
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate {
var window: UIWindow?
var session : WCSession!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Check if session is supported and Activate
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
print("did recieve message from Watch")
let applicationData = ["Array":["One", "Two", "Three"]]
replyHandler(applicationData)
}
Nulla da iPhone. Anche quando apro manualmente l'app.
Il tuo codice mi sta bene. Solo una domanda, stai usando gli stessi dati fittizi ('[" Array ": [" One "," Two "," Three "]]'), giusto? Perché se si dispone di un altro blocco di codice in esecuzione per inviare i dati effettivi, potrebbe esserci qualche altro problema. Per esempio. Una matrice di oggetti personalizzati non può essere comunicata alla Watch App in questo modo. – Gandalf
@Gandalf Stavo per esercitarmi con una serie di stringhe che prima venivano inviate e stampate all'interno delle funzioni di WCSession. Il mio obiettivo era quello di inviare una serie di NSManagedObject per l'orologio da visualizzare nella tabella. Quindi, in pratica, il gestore delle risposte sul telefono inviava il dizionario e una serie di oggetti all'orologio. Davvero strano come non riesca a rispondere al telefono:/Potrei aggiornare Xcode con la nuova versione e sperare per il meglio – RileyDev