W mojej aplikacji iOS używam Core Data do przechowywania danych i żądania pobierania, aby utworzyć tablicę z NSManagedObject
s do wyświetlania w UITableView
.Udostępnianie danych przy użyciu funkcji Watch Connectivity podczas pracy z Core Data
W systemie Watch OS sprawdzam, czy WCSession
jest obsługiwany i aktywuje sesję, a następnie wysłać aplikacji iOS wiadomość z rozszerzenia watchOS.
Gdy aplikacja iOS otrzymuje wiadomość z watchOS, powinna wysłać tablicę Objects
do rozszerzenia watchOS, aby wyświetlić dane w WKInterfaceTable
, ale nie jestem pewien, jak to zrobić. Ostatecznie to, co próbuję osiągnąć, to;
Jak udostępnić tablicę
Objects
z rozszerzeniem watchOS?Jeśli użytkownik dodaje/edytuje/usuwa obiekty w tablicy w zegarku, w jaki sposób możemy zaktualizować dane w telefonie iPhone?
Co więcej, aplikacja iOS jest osadzona wewnątrz
UITabBarController
, więc czy ma znaczenie, z którym kontrolerem widoku komunikuję się?
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 Zastosowanie: 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"])
}
Wygląda na to, że muszę uruchomić aplikację iOS i aplikację Watch, aby ta metoda działała. Które pokonuje punkt szybkiego dostępu do danych na zegarku bez wyciągania telefonu. Mam rację ? – RileyDev
Jeśli zobaczysz komentarze na temat tej metody w WCSession.h, to jest napisane ** Jeśli aplikacja kontrpartner nie jest uruchomiona, odpowiednia aplikacja zostanie uruchomiona po otrzymaniu wiadomości (tylko aplikacja z odpowiednikiem iOS). Słownik wiadomości może akceptować tylko typy list właściwości. ** Nawet jeśli twoja aplikacja Konto iOS jest zamknięta i wysyłasz wiadomość z zegarka na iPhone'a, uruchomi ona aplikację i otrzyma wiadomość, ale odwrócenie nie jest możliwe. – Muneeba