Ermitteln Sie Änderungen in NSUserDefaults mit SuiteName

9

In meinem Projekt verwende ich App-Gruppe, um Daten an Apple Watch zu übertragen! Das sieht so aus.

%Vor%

In WKInterfaceController erhalte ich meine Daten mit diesem Code:

%Vor%

Alles funktioniert gut!

Jetzt versuche ich zu erkennen, ob sich Daten in sharedDefaults? .objectForKey ("DataKey") geändert haben. Ich versuche, die Methode addObserver zu verwenden:

%Vor%

Aber "override func observeValueForKeyPath" ruft nur auf, wenn WKInterfaceController aktiviert wird und nicht aufgerufen hat, wenn ich Daten in NSUserDefaults ändere (suiteName: "group.com.myappname.defaults")

Ich versuche auch, NSNotificationCenter zu verwenden:

%Vor%

Es funktioniert nicht (

Was mache ich falsch? Wie erkennt man, wenn sich Daten geändert haben?

    
Dmitry 26.07.2016, 19:07
quelle

2 Antworten

2

Ich weiß, dass das ein schlechter Weg ist, aber ich habe keine anderen gefunden ... Mein Weg ist endloser Kreislauf:

%Vor%

Wenn jemand anders weiß, bitte posten Sie Ihre Lösung als Antwort auf diese Frage!

    
Dmitry 28.07.2016 14:46
quelle
2

Beziehung zwischen der Watch-App-Oberfläche, der WatchKit-Erweiterung und der iOS-App

Basieren Sie die Beziehung, ich denke, KVO funktioniert nicht zwischen Watchos und iOS. Wenn Sie die neuesten Daten von der iOS-App erhalten möchten, gibt es zwei Möglichkeiten.

  1. Überprüfen Sie die neuesten Daten in willActivate
  2. Hintergrundaufgaben
  

Hintergrundaufgaben sind eine Möglichkeit für Sie, die Oberflächen Ihrer App auf dem neuesten Stand zu halten. Das Empfangen eines Hintergrundaufgabenobjekts vom System ist Ihr Signal, um bestimmte Arten von Operationen durchzuführen. Das Aufgabenobjekt definiert den Typ der auszuführenden Aufgabe und enthält alle Daten, die zur Ausführung der Aufgabe benötigt werden. Das System liefert Hintergrundaufgabenobjekte an Ihre App, indem es die handleBackgroundTasks: -Methode des Erweiterungsdelegaten Ihrer App aufruft.

     

watchOS unterstützt die folgenden Arten von Hintergrundaufgaben:

     
  • Hintergrundaktualisierungsaufgaben. Verwenden Sie ein WKApplicationRefreshBackgroundTask-Objekt, um allgemeine Aktualisierungen des Status Ihrer App zu verarbeiten. Sie können diese Art von Aufgabe beispielsweise verwenden, um sich beim Server Ihres Unternehmens anzumelden oder neue Inhalte herunterzuladen. Sie planen diese Art von Hintergrundaufgabe explizit aus dem WKExtension-Objekt Ihrer App.
  •   
  • Hintergrund-Snapshot-Aktualisierungsaufgaben. Verwenden Sie ein WKSnapshotRefreshBackgroundTask-Objekt, um die Benutzeroberfläche Ihrer App zu aktualisieren, bevor der Snapshot erstellt wird. Das System erstellt den Snapshot automatisch, wenn diese Aufgabe abgeschlossen ist. Das System plant regelmäßig Aktualisierungen des Hintergrund-Snapshots, um Ihren Snapshot zu aktualisieren. Sie können eine Aufgabe dieses Typs auch explizit aus dem WKExtension-Objekt Ihrer App planen, wenn sich Ihre Schnittstelle ändert.
  •   
  • Hintergrund Watch Connectivity Tasks. Verwenden Sie ein WKWatchConnectivityRefreshBackgroundTask-Objekt, um Daten zu empfangen, die von Ihrer iOS-App mithilfe des Watch Connectivity-Frameworks gesendet wurden. Das System erstellt diese Art von Aufgabe automatisch, wenn Ihre Watch-App Daten von der entsprechenden iOS-App empfängt, die auf dem gekoppelten iPhone ausgeführt wird. Sie planen Aufgaben dieses Typs nicht selbst.
  •   
  • Hintergrund NSURLSession Aufgaben. Verwenden Sie ein WKURLSessionRefreshBackgroundTask-Objekt, um Daten zu empfangen, die Sie zuvor mithilfe eines NSURLSession-Objekts angefordert haben. Diese Aufgabe wird ausgelöst, wenn eine Hintergrundübertragung eine Autorisierung erfordert oder wenn eine Hintergrundübertragung erfolgreich oder nicht erfolgreich abgeschlossen wurde. Sie planen Aufgaben dieses Typs nicht selbst.
  •   

Denken Sie daran, dass Hintergrundübertragungen möglicherweise nicht sofort geliefert werden. Dateien und kontextbezogene Daten werden so schnell wie möglich übermittelt, die Übertragung erfolgt jedoch nicht sofort. Datendateien, die große Dateien oder große Datenmengen enthalten, benötigen ebenfalls eine entsprechend lange Zeit.

    
Victor Zhu 31.08.2017 07:41
quelle