Suche…


Einführung

iOS-Benachrichtigungen sind eine einfache und leistungsstarke Methode, um Daten lose gekoppelt zu senden. Das heißt, der Absender einer Benachrichtigung muss sich nicht darum kümmern, von wem (wenn jemand) die Benachrichtigung erhalten wird. Er wird nur an den Rest der App weitergeleitet, und er kann von vielen Dingen abgerufen werden oder abhängig davon, was nicht Der Status Ihrer App.

Quelle : - HACKING mit Swift

Parameter

Parameter Einzelheiten
Name Name der Benachrichtigung, für die der Beobachter registriert werden soll; Das heißt, nur Benachrichtigungen mit diesem Namen werden verwendet, um den Block zur Operationswarteschlange hinzuzufügen. Wenn Sie null übergeben, verwendet das Benachrichtigungscenter nicht den Namen einer Benachrichtigung, um zu entscheiden, ob der Block der Operationswarteschlange hinzugefügt werden soll.
obj Das Objekt, dessen Benachrichtigungen der Beobachter erhalten möchte; es werden also nur Benachrichtigungen dieses Absenders an den Beobachter gesendet. Wenn Sie null übergeben, verwendet die Benachrichtigungszentrale nicht den Absender einer Benachrichtigung, um zu entscheiden, ob sie dem Beobachter zugestellt werden soll.
Warteschlange Die Operationswarteschlange, zu der der Block hinzugefügt werden soll. Wenn Sie nil übergeben, wird der Block synchron im Buchungsthread ausgeführt.
Block Der Block, der ausgeführt werden soll, wenn die Benachrichtigung empfangen wird. Der Block wird vom Benachrichtigungscenter kopiert und (die Kopie) gehalten, bis die Beobachterregistrierung entfernt wird.

Bemerkungen

Ein NSNotificationCenter-Objekt (oder einfach eine Benachrichtigungszentrale) stellt einen Mechanismus zum Senden von Informationen innerhalb eines Programms bereit. Ein NSNotificationCenter-Objekt ist im Wesentlichen eine Benachrichtigungstabelle.

Für mehr Informationen, überprüfen Sie die Apple - Dokumentation heraus hier

NSNotification & NSNotificationCenter in Swift

Beobachter hinzufügen

Namenskonvention

Benachrichtigungen werden durch globale NSString-Objekte identifiziert, deren Namen folgendermaßen zusammengesetzt sind:

Name of associated class + Did | Will + UniquePartOfName + Notification

Zum Beispiel:

  • NSApplicationDidBecomeActiveNotification
  • NSWindowDidMiniaturizeNotification
  • NSTextViewDidChangeSelectionNotification
  • NSColorPanelColorDidChangeNotification

Schnell 2.3

NSNotificationCenter.defaultCenter().addObserver(self, 
                                                 selector: #selector(self.testNotification(_:)), 
                                                 name: "TestNotification", 
                                                 object: nil)

Swift 3

NSNotificationCenter.default.addObserver(self, 
                                         selector: #selector(self.testNotification(_:)), 
                                         name: NSNotification.Name(rawValue: "TestNotification"), 
                                         object: nil)

Ziel c

[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(testNotification:) 
                                      name:@"TestNotification" 
                                      object:nil];

PS: Es ist auch erwähnenswert, dass die Anzahl der Hinzufügungen eines Beobachters genau der Anzahl der Entfernungen des Beobachters entsprechen muss. Ein Anfängerfehler ist das Hinzufügen des Beobachters in viewWillAppear: eines UIViewControllers, das Entfernen des Beobachters in viewDidUnload: bewirkt jedoch eine ungerade Anzahl von viewDidUnload: , wodurch der Beobachter und der Benachrichtigungsselektor überflüssig werden.

Beobachter entfernen

Schnell 2.3

//Remove observer for single notification
NSNotificationCenter.defaultCenter().removeObserver(self, name: "TestNotification", object: nil)
    
//Remove observer for all notifications
NotificationCenter.defaultCenter().removeObserver(self)

Swift 3

//Remove observer for single notification
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "TestNotification"), object: nil)

//Remove observer for all notifications
NotificationCenter.default.removeObserver(self)

Ziel c

//Remove observer for single notification
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"TestNotification" object:nil];
    
//Remove observer for all notifications
[[NSNotificationCenter defaultCenter] removeObserver:self];

Benachrichtigung versenden

Schnell

NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: self)

Ziel c

[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:nil];

Benachrichtigung mit Daten buchen

Schnell

let userInfo: [String: AnyObject] = ["someKey": myObject]
NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: self, userInfo: userInfo)

Ziel c

NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"someKey"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"TestNotification" object:nil userInfo:userInfo];

Benachrichtigung beobachten

Schnell

func testNotification(notification: NSNotification) {
    let userInfo = notification.userInfo
    let myObject: MyObject = userInfo["someKey"]
}

Ziel c

- (void)testNotification:(NSNotification *)notification {
    NSDictionary *userInfo = notification.userInfo;
    MyObject *myObject = [userInfo objectForKey:@"someKey"];
}

Beobachter mit Block hinzufügen / entfernen

Anstatt einen Beobachter mit einem Selektor hinzuzufügen, kann ein Block verwendet werden:

id testObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"TestNotification"
                                                                    object:nil 
                                                                     queue:nil 
                                                                usingBlock:^(NSNotification* notification) {
    NSDictionary *userInfo = notification.userInfo;
    MyObject *myObject = [userInfo objectForKey:@"someKey"];
}];

Der Beobachter kann dann entfernt werden mit:

[[NSNotificationCenter defaultCenter] removeObserver:testObserver 
                                                name:@"TestNotification"
                                              object:nil];

Beobachter für Namen hinzufügen und entfernen

// Add observer
let observer = NSNotificationCenter.defaultCenter().addObserverForName("nameOfTheNotification", object: nil, queue: nil) { (notification) in
    // Do operations with the notification in this block
}

// Remove observer
NSNotificationCenter.defaultCenter().removeObserver(observer)


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow