462 Stimmen

NSNotificationCenter addObserver in Swift

Wie fügt man in Swift einen Beobachter zum Standard-Benachrichtigungscenter hinzu? Ich versuche diese Codezeile zu übertragen, die eine Benachrichtigung sendet, wenn sich der Batteriestand ändert.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryLevelChanged:) name:UIDeviceBatteryLevelDidChangeNotification object:nil];

11voto

swiftBoy Punkte 34715

In Swift 5

Angenommen, Sie möchten Daten von ViewControllerB nach ViewControllerA empfangen

ViewControllerA (Empfänger)

import UIKit

class ViewControllerA: UIViewController  {

    override func viewDidLoad() {
        super.viewDidLoad()

        //MARK: - - - - - Code zum Übergeben von Daten über Benachrichtigungsbeobachter - - - - -
        // Fügen Sie in dem Controller(s) einen Beobachter hinzu, in dem Sie die Daten empfangen möchten
        NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification(notification:)), name: Notification.Name("NotificationIdentifier"), object: nil)
    }

    //MARK: - - - - - Methode zum Empfangen von Daten über Post Benachrichtigung - - - - -
    @objc func methodOfReceivedNotification(notification: Notification) {
        print("Wert der Benachrichtigung: ", notification.object ?? "")
    }
}

ViewControllerB (Sender)

import UIKit

class ViewControllerB: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //MARK: - - - - - Daten für die Übermittlung der Daten über Post-Benachrichtigung festlegen - - - - -
        let objToBeSent = "Testnachricht von der Benachrichtigung"
        NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: objToBeSent)
    }

}

8voto

Sahil Punkte 8758

Daten mit NSNotificationCenter übergeben

Sie können auch Daten mit NotificationCentre in Swift 3.0 und NSNotificationCenter in Swift 2.0 übergeben.

Swift 2.0 Version

Übergeben Sie Informationen mit userInfo, das ein optionales Dictionary vom Typ [NSObject : AnyObject]? ist.

let imageDataDict:[String: UIImage] = ["image": image]

// Eine Benachrichtigung veröffentlichen
 NSNotificationCenter.defaultCenter().postNotificationName(notificationName, object: nil, userInfo: imageDataDict)

// Registrieren Sie sich, um die Benachrichtigung in Ihrer Klasse zu empfangen
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: notificationName, object: nil)

// Behandeln Sie die Benachrichtigung
func showSpinningWheel(notification: NSNotification) {
  if let image = notification.userInfo?["image"] as? UIImage {
  // Machen Sie etwas mit Ihrem Bild   
  }
}

Swift 3.0 Version

Der userInfo nimmt jetzt [AnyHashable:Any]? als Argument an, das wir als Dictionary-Literal in Swift bereitstellen

let imageDataDict:[String: UIImage] = ["image": image]

// Eine Benachrichtigung veröffentlichen
 NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict) 
// `default` ist jetzt eine Eigenschaft, keine Methodenaufruf

// Registrieren Sie sich, um die Benachrichtigung in Ihrer Klasse zu empfangen
NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)

// Behandeln Sie die Benachrichtigung
func showSpinningWheel(_ notification: NSNotification) {

  if let image = notification.userInfo?["image"] as? UIImage {
  // Machen Sie etwas mit Ihrem Bild   
  }
}

Quelle Datenübertragung mit NotificationCentre(Swift 3.0) und NSNotificationCenter(Swift 2.0)

5voto

Sasinderan N Punkte 59
  1. Erstellen Sie eine ObjC-Funktion, die ausgeführt werden soll, wenn die Benachrichtigung aufgerufen wird.

    @objc func reloadNotification(_ notification: Notification) { tblview.reloadData() }

  2. Fügen Sie den Benachrichtigungsbeobachter im view did load hinzu.

    NotificationCenter.default.addObserver(self, selector:#selector(reloadNotification(_:)), name: Notification.Name("reloadSideMenuDataNS"),object: nil)

  3. Posten Sie Ihre Benachrichtigung dort, wo Sie die Funktion aufrufen möchten.

    NotificationCenter.default.post(name: Notification.Name("reloadSideMenuDataNS"), object: nil)

  4. Sie können Ihre Benachrichtigung im view did disappear mit folgendem entfernen.

    NotificationCenter.default.removeObserver(self, name: Notification.Name("reloadSideMenuDataNS"), object: nil)

5voto

Imran Rasheed Punkte 775

Swift 5 Benachrichtigungsbeobachter

override func viewDidLoad() {
    super.viewDidLoad() 
    NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelChanged), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
}

@objc func batteryLevelChanged(notification : NSNotification){
    //Hier Code ausführen
}

override func viewWillDisappear(_ animated: Bool) {
    NotificationCenter.default.removeObserver(self, name: UIDevice.batteryLevelDidChangeNotification, object: nil)

}

4voto

Bera Bhavin Punkte 505

Dies ist ein sehr einfaches Beispiel für benutzerdefinierte Benachrichtigungsbeobachter und -posten

Benachrichtigungsbeobachter hinzufügen

NotificationCenter.default.addObserver(self, selector: #selector(myFunction), name: Notification.Name("CustomeNotificationName"), object: nil)

Selector hinzufügen und Beobachteraufruf behandeln

@objc func myFunction(notification: Notification) {

    //Schreiben Sie Ihren Code
}

Benachrichtigung (Beobachter) posten, wenn es erforderlich ist.

NotificationCenter.default.post(name: NSNotification.Name("CustomeNotificationName"), object: "Object", userInfo: ["key":"Value"])

Anmerkungen: - Stellen Sie sicher, dass Sie den Beobachter entfernen, wenn Sie die Ansicht verlassen. z.B.

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    NotificationCenter.default.removeObserver(self);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X