Recherche…


Introduction

Les notifications iOS sont un moyen simple et puissant d’envoyer les données de manière souple. En d’autres termes, l’expéditeur d’une notification n’a pas à se soucier de savoir qui (le cas échéant) reçoit la notification, il la publie simplement sur le reste de l’application et elle peut être extraite par beaucoup de choses ou par rien. l'état de votre application.

Source : - HACKING avec Swift

Paramètres

Paramètre Détails
prénom Le nom de la notification pour laquelle enregistrer l'observateur; c'est-à-dire que seules les notifications portant ce nom sont utilisées pour ajouter le bloc à la file d'attente des opérations. Si vous omettez, le centre de notification n'utilise pas le nom d'une notification pour décider d'ajouter le bloc à la file d'attente des opérations.
obj L'objet dont l'observateur souhaite recevoir les notifications; c'est-à-dire que seules les notifications envoyées par cet expéditeur sont envoyées à l'observateur. Si vous ne transmettez aucune information, le centre de notification n'utilise pas l'expéditeur d'une notification pour décider de la remettre à l'observateur.
queue La file d'attente d'opération à quel bloc devrait être ajoutée. Si vous passez nil, le bloc est exécuté de manière synchrone sur le thread de publication.
bloc Le bloc à exécuter lors de la réception de la notification. Le bloc est copié par le centre de notification et (la copie) est conservé jusqu’à ce que l’enregistrement de l’observateur soit supprimé.

Remarques

Un objet NSNotificationCenter (ou simplement un centre de notification) fournit un mécanisme de diffusion d'informations dans un programme. Un objet NSNotificationCenter est essentiellement une table de distribution des notifications.

Pour plus d'informations, consultez la documentation Apple ici

NSNotification & NSNotificationCenter dans Swift

Ajouter un observateur

Convention de nommage

Les notifications sont identifiées par des objets NSString globaux dont les noms sont composés de cette manière:

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

Par exemple:

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

Objectif c

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

PS: Il est également intéressant de noter que le nombre de fois qu'un observateur a été ajouté doit être exactement le nombre de fois que l'observateur est supprimé. Une erreur de débutant consiste à ajouter un observateur dans viewWillAppear: d'un UIViewController, mais supprimer l'observateur dans viewDidUnload: entraînera un nombre irrégulier de poussées et donc une fuite de l'observateur et le rappel du sélecteur de notification de manière superflue.

Supprimer des observateurs

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)

Objectif c

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

Poster une notification

Rapide

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

Objectif c

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

Publication d'une notification avec des données

Rapide

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

Objectif c

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

Observation d'une notification

Rapide

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

Objectif c

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

Ajout / Suppression d'un observateur avec un bloc

Au lieu d'ajouter un observateur avec un sélecteur, un bloc peut être utilisé:

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

L'observateur peut alors être retiré avec:

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

Ajouter et supprimer un observateur pour le nom

// 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow