Wie teile ich Daten mit Watch Connectivity, wenn ich mit Core Data arbeite?
n meiner iOS-Anwendung verwende ich Core Data zum Speichern von Daten und eine Abrufanforderung zum Erstellen eines Arrays vonNSManagedObject
s zum Anzeigen in einemUITableView
.
uf dem Watch OS überprüfe ich obWCSession
wird unterstützt und aktiviert eine Sitzung. Senden Sie der iOS-Anwendung eine Nachricht von der watchOS-Erweiterung.
Wenn die iOS-Anwendung die Nachricht vom watchOS empfängt, sollte sie das Array von @ sendeObjects
zur watchOS-Erweiterung, um die Daten im @ anzuzeigWKInterfaceTable
, aber ich bin nicht sicher, wie ich das machen soll. Letztendlich versuche ich folgendes zu erreichen:
Wie teile ich das Array vonObjects
mit der watchOS-Erweiterung?
Wie können wir die Daten auf dem iPhone aktualisieren, wenn der Benutzer Objekte im Array auf der Uhr hinzufügt / bearbeitet / löscht?
Auch die iOS-Anwendung ist in ein @ eingebettUITabBarController
Ist es auch wichtig, mit welchem View-Controller ich kommuniziere?
Watch 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"])
}