Zoeken…


Invoering

iOS-meldingen zijn een eenvoudige en krachtige manier om gegevens op een losjes gekoppelde manier te verzenden. Dat wil zeggen, de afzender van een melding hoeft zich geen zorgen te maken over wie (als iemand) de melding ontvangt, deze wordt gewoon naar de rest van de app gepost en het kan worden opgepikt door veel dingen of niets, afhankelijk van de status van uw app.

Bron : - HACKING met Swift

parameters

Parameter Details
naam De naam van de melding waarvoor de waarnemer moet worden geregistreerd; dat wil zeggen dat alleen meldingen met deze naam worden gebruikt om het blok aan de wachtrij toe te voegen. Als u nul doorgeeft, gebruikt het meldingscentrum de naam van een melding niet om te beslissen of het blok aan de wachtrij moet worden toegevoegd.
obj Het object wiens meldingen de waarnemer wil ontvangen; dat wil zeggen, alleen meldingen die door deze afzender worden verzonden, worden aan de waarnemer afgeleverd. Als u nul passeert, gebruikt het meldingscentrum de afzender van een melding niet om te beslissen of deze aan de waarnemer wordt bezorgd.
wachtrij De bewerkingswachtrij waaraan blok moet worden toegevoegd. Als u nul doorgeeft, wordt het blok synchroon uitgevoerd op de boekingsdraad.
blok Het blok dat moet worden uitgevoerd wanneer de melding wordt ontvangen. Het blok wordt door het meldingscentrum gekopieerd en (de kopie) bewaard totdat de waarnemersregistratie is verwijderd.

Opmerkingen

Een NSNotificationCenter-object (of eenvoudigweg een meldingscentrum) biedt een mechanisme voor het uitzenden van informatie binnen een programma. Een NSNotificationCenter-object is in wezen een meldingstabel voor meldingen.

Bekijk hier de Apple-documentatie

NSNotification & NSNotificationCenter in Swift

Een waarnemer toevoegen

Naamgeving

Meldingen worden geïdentificeerd door globale NSString-objecten waarvan de namen op deze manier zijn samengesteld:

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

Bijvoorbeeld:

  • NSApplicationDidBecomeActiveNotification
  • NSWindowDidMiniaturizeNotification
  • NSTextViewDidChangeSelectionNotification
  • NSColorPanelColorDidChangeNotification

Swift 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)

Doelstelling C

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

PS: Het is ook vermeldenswaard dat het aantal keren dat een waarnemer is toegevoegd, precies het aantal keren moet zijn dat de waarnemer is verwijderd. Een groentje fout is om de waarnemer toe te voegen in de viewWillAppear: van een UIViewController, maar de waarnemer verwijderen in viewDidUnload: zal een ongelijk aantal duwtjes veroorzaken en dus de waarnemer lekken en de meldingskiezer op een overbodige manier worden aangeroepen.

Waarnemers verwijderen

Swift 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)

Doelstelling C

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

Een melding plaatsen

Snel

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

Doelstelling C

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

Een melding met gegevens plaatsen

Snel

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

Doelstelling C

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

Een melding waarnemen

Snel

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

Doelstelling C

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

Een waarnemer met een blok toevoegen / verwijderen

In plaats van een waarnemer met een selector toe te voegen, kan een blok worden gebruikt:

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

De waarnemer kan vervolgens worden verwijderd met:

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

Voeg toe en verwijder waarnemer voor naam

// 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow