In meiner iOS-Anwendung verwende ich Core Data zum Speichern von Daten und eine Abrufanforderung zum Erstellen eines Arrays von s zur Anzeige in einem UITableView
.So teilen Sie Daten mit Watch Connectivity beim Arbeiten mit Core Data
Auf dem Watch OS überprüfe ich, ob unterstützt wird und aktiviere eine Sitzung, dann sende ich der iOS-Anwendung eine Nachricht von der watchOS-Erweiterung. Wenn die iOS-Anwendung die Nachricht vom watchOS empfängt, sollte sie das Array Objects
an die watchOS-Erweiterung senden, um die Daten in der WKInterfaceTable
anzuzeigen. Letztendlich versuche ich zu erreichen;
Wie das Array von
Objects
mit der watchOS Erweiterung teilen?Wenn der Benutzer Objekte im Array auf der Uhr hinzufügt/bearbeitet/löscht, wie können wir die Daten auf dem iPhone aktualisieren?
Auch die iOS-Anwendung ist in eine
UITabBarController
eingebettet, also spielt es eine Rolle, mit welchem View-Controller ich kommuniziere?
beobachten OS FavouritesInterfaceController
var session : WCSession!
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
//Check if session is supported and Activate
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Interface Objects
//Send Message
sendmessagetoiphone()
}
func sendMessageToIphone() {
if(WCSession.isSupported()){
session.sendMessage(["b":"goodBye"], replyHandler: nil, errorHandler: nil)
}
}
IOS Anwendung: FavouritesViewController
var objects = [Objects]()
func loadData() {
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let request = NSFetchRequest(entityName: "Objects")
request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
do {
try
self.objects = moc.executeFetchRequest(request) as! [Objects]
// success ...
} catch {
// failure
print("Fetch failed")
}
}
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
//handle received message
let value = message["Value"] as? String
dispatch_async(dispatch_get_main_queue()) {
self.messageLabel.text = value
}
//send a reply
replyHandler(["Value":"Hello Watch"])
}
Es scheint, ich muss sowohl die iOS-Anwendung und Watch App offen für diese Methode zu arbeiten haben. Das verhindert den schnellen Zugriff auf Daten auf Ihrer Uhr, ohne dass Sie Ihr Telefon herausziehen müssen. Hab ich recht ? – RileyDev
Wenn Sie die Kommentare zu dieser Methode in WCSession.h sehen, heißt es: ** Wenn die Pendant-App nicht ausgeführt wird, wird die Pendant-App beim Empfang der Nachricht gestartet (nur iOS-Pendant-App). Das Nachrichtenwörterbuch kann nur die Eigenschaftslistentypen akzeptieren. ** Selbst wenn Ihre Gegen-iOS-App geschlossen ist und Sie eine Nachricht von der Uhr an das iPhone senden, wird die App gestartet und die Nachricht empfangen, aber das Gegenteil ist nicht möglich. – Muneeba