Inkonsistentes Verhalten von openParentApplication in meiner WatchKit App

8

Ich entwickle eine Apple Watch-Anwendung, die die Methode openParentApplication:reply: verwendet, um mit ihrer übergeordneten App zu kommunizieren.

Die übergeordnete App kommuniziert mit einem Webdienst und sendet die Daten, die sie an die Überwachungserweiterung erhält, zurück, indem sie die Methode reply mit einem NSDictionary aufruft, das die Daten enthält.

Die App funktioniert perfekt, wenn die Eltern-App im Vordergrund oder im Hintergrund geöffnet ist. Aber wenn ich das übergeordnete App öffnen und dann beenden sie die Task Switcher verwenden, das erste Mal die Uhr Verlängerung macht einen Anruf openParentApplication:replyInfo: , es wird die folgende Fehlermeldung und den Parameter replyInfo kommt als null.

UIApplicationDelegate in the iPhone App never called reply()

Aber jeder einzelne openParentApplication:replyInfo: Aufruf der Erweiterung macht danach eine richtige Antwort.

Ich habe überprüft und festgestellt, dass beim ersten Aufruf der Überwachungserweiterung der handleWatchKitExtensionRequest:reply: nie in der übergeordneten App aufgerufen wird.

Was könnte der mögliche Grund dafür sein?

Ich führe alle Vorgänge in handleWatchKitExtensionRequest:reply: in einer Hintergrundaufgabe aus, wie in den Dokumenten vorgeschlagen. Hier ist ein Teil meines Codes: Code von meiner Erweiterung:

%Vor%

Code aus der übergeordneten App:

%Vor%

Edit 1: Das Problem tritt sowohl im Simulator als auch auf einer echten Apple Watch auf.

    
Cihan Tek 03.07.2015, 15:23
quelle

2 Antworten

5

Es sieht so aus, als gäbe es einen Fehler in iOS 8.4.

Ich habe NSLog s am Anfang von application:didFinishLaunchingWithOptions: und handleWatchKitExtensionRequest:reply: hinzugefügt, die Aktionen ausgeführt, die zu dem Problem geführt haben, und dann das Geräteprotokoll überprüft und folgendes erhalten:

%Vor%

Dieses Protokoll zeigt, dass application:didFinishLaunchingWithOptions: aufgerufen wird, NACHDEM das Betriebssystem einen Fehler meldet, wenn keine Antwort von der übergeordneten App empfangen wird. Wie wird die App eine Antwort geben, wenn sie nicht zuerst gestartet wird?

Ich habe das Problem vorübergehend gelöst, indem ich die Methode openParentApplication:reply: erneut aufruft, wenn dieses Problem auftritt.

Die Art und Weise, wie ich das Verhalten bei einmaligem Versuch implementiert habe, besteht darin, eine Methode zu erstellen, die den Aufruf umschließt und stattdessen die ursprüngliche Methode verwendet. Ich habe dies als eine Klassenmethode zu einer Dienstprogrammklasse hinzugefügt, aber es kann auch eine globale Funktion sein.

%Vor%     
Cihan Tek 06.07.2015, 08:57
quelle
0

Ich bekomme das gleiche Problem. Sehen Sie sich das folgende Bare-Bones-Projekt an, das ich für einen Fehlerbericht an Apple erstellt habe: Ссылка .

@Cihan Tek - wie rufst du openParentApplication an: antwort: schon wieder? Rufen Sie es im Antwortblock an? Ich erhalte immer noch den Fehler, wenn ich das tue.

    
user3091519 08.07.2015 13:23
quelle

Tags und Links