Ich verwende Watch Connectivity, um ein Array vom iPhone zur Watch anzufordern.Fehler: "Nachrichtenantwort hat zu lange gedauert" - WCSession Watch OS2
Die Idee war zu sendMessage
von der Uhr, und das iPhone wird mit dem Array innerhalb der didReceiveMessage
Methode antworten.
Allerdings scheint das iPhone nicht zu reagieren, ich dachte, das iPhone würde die Anwendung öffnen, wenn ich die Nachricht von der Uhr senden. Ich habe sogar versucht, die Anwendung zu öffnen, als ich sendMessage
aber immer noch kein Glück. Wenn ich lange genug warte, erhalte ich die folgende Fehlermeldung:
Wer weiß, wo ich vielleicht falsch liege?
Apple Watch
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)")
}
Die Konsole Ausgänge
WCSession is reachabe Array nil
iPhone App Delegierter
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)
}
Nichts von dem iPhone ausgeführt wird. Auch wenn ich die App manuell öffne.
Ihr Code sieht gut aus für mich. Nur eine Frage, Sie verwenden die gleichen Dummy-Daten ('[" Array ": [" One "," Two "," Three "]]'), oder? Denn wenn Sie einen anderen Code-Block ausführen lassen, um die eigentlichen Daten zurückzusenden, könnte es ein anderes Problem geben. Z.B. Ein Array von benutzerdefinierten Objekten kann nicht wie folgt an Watch App zurückgegeben werden. – Gandalf
@Gandalf Ich wollte zuerst mit einem Array von Strings üben, das innerhalb der WCSession-Funktionen gesendet und ausgedruckt wurde. Mein Ziel war es, ein Array von NSManagedObjects an die Watch zu senden, um sie in der Tabelle anzuzeigen. Im Grunde würde der Antworthandler auf dem Telefon das Wörterbuch mit einem Array von Objekten an die Uhr senden. Wirklich komisch, wie ich das Telefon nicht beantworten kann:/Xcode mit der neuen Version aktualisieren und hoffen auf die beste – RileyDev