ios - puedo - Cómo compartir datos usando Watch Connectivity cuando se trabaja con Core Data
compartir internet iphone se desconecta (3)
En mi aplicación iOS, uso Core Data para almacenar datos y una solicitud de recuperación para crear una matriz de NSManagedObject
para mostrar en una UITableView
.
En Watch OS WCSession
si WCSession
es compatible y activo una sesión, luego envío a la aplicación iOS un mensaje de la extensión de watchOS.
Cuando la aplicación iOS recibe el mensaje de watchOS, debe enviar la matriz de Objects
a la extensión watchOS para mostrar los datos en la WKInterfaceTable
, pero no estoy seguro de cómo hacerlo. En definitiva, lo que intento lograr es;
¿Cómo compartir la matriz de
Objects
con la extensión watchOS?Si el usuario agrega / edita / elimina objetos en la matriz en el reloj, ¿cómo podemos actualizar los datos en el iPhone?
Además, la aplicación iOS está incrustada dentro de un
UITabBarController
entonces, ¿qué importancia tiene con qué controlador de visualización me comunico?
Ver 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)
}
}
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"])
}
Puede usar replyHandler en sendMessage para hacer esto. Asegúrese de implementar el manejador de respuestas tanto en la aplicación Watch como en iOS para obtener esto.
Básicamente, si lo haces bien, tu manejador de respuestas puede garantizar lo que hace tu aplicación iOS en respuesta al mensaje de una aplicación de visualización.
Además, hablando de su respuesta (de enviar una serie de objetos), debe enviarla como un diccionario y buscarla en el reloj.
Primero, esta es una muy buena pregunta. Para empezar, le recomiendo que vea esta sesión de la WWDC 2015: Sesión 713 - Introducción a Watch Connectivity. Esto se puede encontrar aquí.
Ahora a tu pregunta real. Hay un gran tutorial y repo de Github que le muestran cómo comunicar los datos centrales entre su aplicación Apple Watch y la aplicación contenedora utilizando grupos de aplicaciones, ya que esto le permite acceder a todo el contenido compartido, como Core Data e incluso NSUSerdefaults.
A continuación, puede encontrar el tutorial completo sobre cómo hacerlo en el siguiente enlace .
Espero que eso ayude, Julian.
¿Cómo compartir la matriz de objetos con la extensión Watch OS? Como está utilizando
WatchConnectivity
Framework, envíe la matriz de objetos desde iPhone utilizando el métodosendMessage
y en suFavoritesInterfaceController
implemente lafunc session(session: WCSession, didReceiveMessage
métodofunc session(session: WCSession, didReceiveMessage
para obtener la respuesta o puede obtener la matriz en la administración de la respuesta) .Si el usuario agrega / edita / elimina objetos en la matriz en Watch OS, ¿cómo podemos actualizar los datos en el iPhone?
Envíe el objectId junto con los nuevos cambios en su método
sendMessage
de reloj a teléfono, al recibir en el teléfono los cambios en su base de datos, guárdelo y envíe el valor actualizado en su replyHandler para que el contenido de su reloj se actualice en consecuencia.Además, la aplicación iOS está incrustada en un UITabBarController, entonces, ¿qué importancia tiene con qué controlador de visualización me comunico?
Desea viewController al que se está comunicando O el que es responsable de hacer los cambios debe estar vivo. Si múltiples ViewControllers están escuchando
WCSessionDelegates
, cuando envíe un mensaje de observación, todos los controladores en vivo recibirán ese mensaje. Debe incluir algún tipo deidentifier
en su diccionariosendMessage
para que pueda saber qué operación realizar. Por ejemplo, si deseadelete
un objeto, cuandowatch
envíe un mensaje, elidentifier
contendrá ladelete
para que al recibirlo pueda verificar el valor delidentifier
y realizar la operación dedelete
.