wcsession

___ tag123ios9 ___ iOS 9 ist die neunte Version von Apples iOS-Mobilbetriebssystem. Es wurde am 8. Juni 2015 auf der Apple Worldwide Developers Conference (WWDC) des Unternehmens angekündigt. ___ tag123watchkit ___ WatchKit ist ein integraler Bestandteil der Apple Watch-Erfahrung für Anwendungen von Drittanbietern. Es enthält die Klassen zum Erstellen von Apple Watch-Anwendungen und stellt sicher, dass eine Apple Watch-Anwendung mit der entsprechenden WatchKit-Erweiterung kommunizieren kann. ___ tag123watchos2 ___ watchOS 2 ist die zweite Version von Apples Betriebssystem für Apple Watch und ist der Nachfolger von watchOS. Es wurde am 8. Juni 2015 auf der Apple Worldwide Developers Conference (WWDC) angekündigt und am 21. September 2015 veröffentlicht. ___ answer36412106 ___

Ich hatte seit dem 2.2-Update letzte Woche sehr ähnliche Probleme mit der Kommunikation zur Arbeit - aber ich konnte den App-Kontext oder die Dateien nicht übertragen.

Wie alle anderen auch, funktionierte es im Simulator, aber nicht auf dem Gerät.

Ich habe heute festgestellt, dass ich versucht habe, Daten von einem Hintergrund-Thread zu senden - ich habe alle meine Anrufe in ein %code% eingepackt und plötzlich funktioniert jetzt alles.

    
___ tag123wscession ___ Die WCSession-Klasse ermöglicht die Kommunikation zwischen einer WatchKit-Erweiterung und der zugehörigen iOS-App. Verwenden Sie dieses Tag nur für Fragen, die direkt an die WCSession-Klasse und das WCSessionDelegate-Protokoll gerichtet sind. Für andere Fragen beachten Sie die Tags 'watchconnectivity' oder 'watchkit'. ___ qstntxt ___

Ich habe eine iOS 9.2 und watchOS 2.1 App, die %code% und %code% verwendet, um Daten vom iPhone zur Apple Watch zu senden. Wenn %code% fehlschlägt, verwende ich %code% , um die Daten für die spätere Zustellung in die Warteschlange zu stellen:

%Vor%

Ohne Code zu ändern und die App auf iOS 9.3 mit watchOS 2.2 auf einem echten Gerät auszuführen (Simulator hat nicht das gleiche Problem), liefert %code% Daten an die Apple Watch, solange die Uhr in Reichweite ist und die Bildschirm ist eingeschaltet. Dies ist wie erwartet und wie es vorher funktioniert hat. Wenn der Bildschirm jedoch ausgeschaltet ist und %code% fehlschlägt, liefert %code% keine Daten mehr an die Apple Watch, wenn der Bildschirm wieder eingeschaltet wird.

Um herauszufinden, wo dieser Fehler aufgetreten ist, habe ich die folgende %code% -Methode hinzugefügt, um zu sehen, ob die iOS-App die Daten nicht senden konnte:

%Vor%

Diese Methode wird aufgerufen, nachdem %code% aufgerufen wurde, aber es wird kein Fehler zurückgegeben und die iOS-App scheint anzuzeigen, dass die Übertragung erfolgreich durchgeführt wurde.

Zuerst dachte ich, dass vielleicht die Zeit für die Übertragung der Daten verlängert wurde, aber nachdem das Gerät für einen Tag allein gelassen wurde, waren die Daten noch nicht übertragen. Ich bin jetzt etwas verdächtig, dass es etwas mit der neuen Multi-Watch-API zu tun hat, und vielleicht muss die iOS-App eine bestimmte Uhr kennen, an die sie gesendet werden kann, obwohl ich nur eine einzige gepaarte Uhr hatte. Hat jemand irgendwelche Ideen, was sich geändert haben könnte und wie man %code% richtig benutzt?

    
___ qstnhdr ___ WCSessions transferUserInfo funktioniert nicht mehr zuverlässig in watchOS 2.2 mit iOS 9.3 ___ answer36318723 ___

Ich denke, ich arbeite jetzt daran. Zuerst musste ich die neuen WCSessionDelegate-Methoden zu meiner iOS-App hinzufügen:

%Vor%

Und ähnlich meiner watchOS App:

%Vor%

Aber transferUserInfo funktionierte immer noch nicht für mich, insbesondere wenn der Bildschirm der Apple Watch ausgeschaltet war. Im Folgenden sende ich Informationen zwischen einem iPhone und einer Apple Watch in iOS 9.2 / watchOS 2.1:

%Vor%

Ich hatte angenommen, dass das Senden einer Nachricht vom iPhone an die Apple Watch, wenn der Bildschirm der Uhr ausgeschaltet war, dazu geführt hat, dass transferUserInfo fehlgeschlagen ist, weil sie sich im Fehlerhandler von sendMessage befand. sendMessage funktionierte auch wie erwartet, wenn der Bildschirm aktiv war. Es sieht jedoch so aus, als würde der Fehlerbeantwortungshandler von sendMessage nicht immer aufgerufen, wenn der Bildschirm Ihrer Uhr ausgeschaltet ist, obwohl die Anfrage fehlschlägt. Dies ist ein anderes Verhalten als bei den vorherigen Betriebssystemversionen. Dies scheint auch einen Kaskadeneffekt verursacht zu haben, bei dem nachfolgende Nachrichten ebenfalls fehlgeschlagen sind, obwohl die Bedingungen angemessen waren. Das hat mich glauben gemacht, dass transferUserInfo schuld ist.

Ich habe festgestellt, dass ich, um meine Nachrichten zuverlässig durchlaufen zu können, sowohl nach erreichbaren als auch nach activationState suchen muss. Da ich auch weiterhin frühere iOS- und watchOS-Versionen unterstützen wollte, wurde meine tryWatchSendMessage-Methode wie folgt:

%Vor%

Diese Änderungen scheinen die Probleme, die ich gesehen habe, gelöst zu haben. Ich bin daran interessiert zu sehen, ob diese helfen, die Probleme anderer zu lösen, oder wenn es noch immer Probleme gibt, die zu transferUserInfo nicht funktionieren.

    
___ tag123ios93 ___ Dieses Tag sollte in Fragen verwendet werden, die sich speziell auf iOS 9.3 beziehen. Wenn die Version keine Rolle spielt, verwende das iOS-Tag. ___
2
Antworten

WCSessions transferUserInfo funktioniert nicht mehr zuverlässig in watchOS 2.2 mit iOS 9.3

Ich habe eine iOS 9.2 und watchOS 2.1 App, die sendMessage und transferUserInfo verwendet, um Daten vom iPhone zur Apple Watch zu senden. Wenn sendMessage fehlschlägt, verwende ich transferUserInfo , um die Daten für die spätere Zuste...
29.03.2016, 13:58