Cómo compartir datos usando Watch Connectivity cuando se trabaja con Core Data
En mi aplicación iOS, uso Core Data para almacenar datos y una solicitud de búsqueda para crear una matriz deNSManagedObject
s para mostrar en unUITableView
.
En Watch OS compruebo siWCSession
es compatible y activa una sesión, luego envía un mensaje a la aplicación iOS desde la extensión watchOS.
Cuando la aplicación iOS recibe el mensaje de watchOS, debe enviar la matriz deObjects
a la extensión watchOS para mostrar los datos en elWKInterfaceTable
, pero no estoy seguro de cómo hacer esto. En última instancia, lo que estoy tratando de lograr es;
Cómo compartir la variedad deObjects
con la extensión watchOS?
Si el usuario agrega / edita / elimina objetos en la matriz del reloj, ¿cómo podemos actualizar los datos en el iPhone?
Además, la aplicación iOS está incrustada dentro de unUITabBarController
Entonces, ¿importa con qué controlador de vista me comunico?
Vea los favoritos de OSInterfaceController
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)
}
}
Aplicación IOS: 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"])
}