0

Ich habe in einem schnellen Datei deklariert Benachrichtigung Name, Ziel Mitgliedschaft der beiden Haupt-App und heute widget hat:Beobachten Mitteilung in Heute Widget, das von der Haupt App gebucht

let SpecialKey = Notification.Name("howLongNotif") 

Da ist in meinem Haupt-App-View-Controller, ich veröffentliche Benachrichtigung, wenn Standort aktualisiert wird (Hintergrundmodus für Standortaktualisierungen aktiviert ist):

NotificationCenter.default.post(name: SpecialKey, object: nil, userInfo: nil) 

In meinem heute widget viewDidLoad, ich beobachte es wie folgt aus:

NotificationCenter.default.addObserver(self, selector: #selector(TodayViewController.dataReceived), name: SpecialKey, object: nil) 

und haben:

func dataReceived(_notification: NSNotification) { 
    print("data received") 
} 

Aber dataReceived Funktion nie aufgerufen wird.

Ich getestet, indem Sie die Beobachter und DataReceived-Funktion auf Haupt-App und es funktioniert gut dort.

Antwort

1

Ihre Haupt-App und heute ist die Erweiterung werden als separate Prozesse auf dem Telefon ausgeführt. NSNotificationCenter funktioniert nur in einem einzigen Prozess.

Um Informationen zwischen Ihrer Erweiterung und der Hauptanwendung zu übertragen, können Sie NSUserDefaults oder eine Datei im freigegebenen Container verwenden.

+0

Problem mit NSUserDefaults ist, dass um Live-Informationen zu erhalten, ich muss weiter schreiben und lesen von ihnen, die nicht wie eine gute Lösung für Live-Informationen klingt. – Kashif

+0

Es gibt keinen guten Mechanismus für diese Art von Live-Informationen. Es besteht eine gute Chance, dass Ihre Hauptanwendung nicht einmal ausgeführt wird, wenn Ihre heutige Erweiterung verwendet wird. Welche Art von Live-Informationen möchten Sie kommunizieren? –

+0

Meine Haupt-App läuft im Hintergrundmodus und kommuniziert kontinuierlich (jede Sekunde) den Standort mit dem heutigen Widget. – Kashif

Verwandte Themen