Im heutigen Quick Tip erfahren Sie mehr über die NSNotification-Klasse, während Sie ein Demoprojekt erstellen, um Änderungen in der Geräteorientierung zu überwachen. Lass uns anfangen!
Bei einem Lebensmittelwagen zu bestellen, ähnelt der Arbeit mit einem NS-Benachrichtigung
. Sie gehen zum Schalter, geben Ihre Bestellung auf, erhalten eine Nummer und warten, bis Ihre Nummer angerufen wird. Normalerweise stehen Sie mit fünf anderen Leuten herum, die darauf warten, dass auch ihre Nummer angerufen wird. Und wenn der Koch mit der Zubereitung fertig ist, ruft die Person hinter der Theke Ihre Nummer an und Sie setzen sich zum Essen. Mit NS-Benachrichtigung
, Sie werden Beobachter für "Ihre Nummer" und wenn das Objekt, in dem die Benachrichtigung veröffentlicht wird, "Ihr Essen zubereiten" ist NSNotificationCenter
ruft deine Nummer an, damit du dein "Essen" holen kannst. In diesem Lernprogramm warten wir nicht auf Essen, sondern warten, bis sich das Gerät dreht, und senden dann die aktuelle Ausrichtung an den Beobachter. Wir sprechen darüber, wie Sie sich registrieren, um eine Benachrichtigung zu erhalten, eine Benachrichtigung zu posten und ein String-Objekt zusammen mit der Benachrichtigung zu übergeben Benutzerinformation
.
Starten Sie Xcode und klicken Sie auf Datei> Neu> Projekt. Wählen Sie eine iOS-Einzelansichtanwendung aus und klicken Sie auf "Weiter". Benennen Sie Ihr Produkt "Benachrichtigungen" und geben Sie einen Namen für Ihre Firmenkennung ein, z. B. "com.companyName.notifications". Wählen Sie die iPhone-Gerätefamilie aus und klicken Sie auf "Weiter". Wählen Sie einen Speicherort für das Projekt aus und klicken Sie auf "Erstellen".
Deklarieren Sie die Methoden zum Senden und Empfangen der Benachrichtigung, indem Sie den folgenden Code in die Datei "ViewController.m" eingeben.
@interface ViewController () - (void) postNotificationWithString: (NSString *) Orientierung; - (ungültig) useNotificationWithString: (NSNotification *) - Benachrichtigung; @Ende
Jetzt können wir das registrieren ViewController
Objekt, um Benachrichtigungen zu erhalten. Geben Sie den folgenden Code in das ein viewDidLoad
Methode.
NSString * notificationName = @ "MTPostNotificationTut"; [[NSNotificationCenter defaultCenter] addObserver: Selbstauswahl: @selector (useNotificationWithString :) name: notificationName object: nil];
Es gibt vier wichtige Teile des NSNotificationCenter
Methode addObserver: Selektor: Name: Objekt:
. Das Argument für addObserver:
ist das Objekt, das wissen möchte, wann eine bestimmte Benachrichtigung auftritt. Das Argument für Wähler:
ist die Methode, die aufgerufen wird, wenn die Benachrichtigung erfolgt. Das Argument für Name:
ist der Titel der Benachrichtigung, die der Beobachter wissen möchte. es muss einzigartig sein. Das letzte Stück der Methode ist Objekt:
. Ihr Argument ist das Objekt, das an die Benachrichtigung angehängt wird, und ist häufig Null
abhängig vom Kontext der Benachrichtigung.
Als Nächstes generieren wir die Logik für die Veröffentlichung einer Benachrichtigung. Geben Sie den folgenden Code in die Datei "ViewController.m" ein. Die benutzerdefinierte Methode postNotificationWithString:
Das zuvor deklarierte Argument nimmt ein Argument an, das die Ausrichtung des Geräts darstellt.
- (void) postNotificationWithString: (NSString *) Orientierung // Post-Benachrichtigungsmethode und -logik NSString * notificationName = @ "MTPostNotificationTut"; NSString * key = @ "OrientationStringValue"; NSDictionary * dictionary = [NSDictionary dictionaryWithObject: orientation forKey: key]; [[NSNotificationCenter defaultCenter] postNotificationName: notificationName-Objekt: nil userInfo: dictionary];
Es gibt drei wichtige Teile des NSNotificationCenter
Methode postNotificationName: object: userInfo:
. Das Argument für postNotificationName:
ist der Titel der Benachrichtigung, die zuvor registriert wurde addObserver: Selektor: Name: Objekt:
Methode. Das Argument für Objekt:
, wieder ist das Objekt die Benachrichtigung und in diesem Fall Null
. Das Argument für Benutzerinformation
ist ein NSDictionary
kann verwendet werden, um zusätzliche Informationen mit der Benachrichtigung zu senden. Benutzerinformation
kann sein Null
, In diesem Fall möchten wir jedoch die Ausrichtung des Geräts kennen. Um diese zusammen mit der Benachrichtigung zu versenden, werden die Informationen in ein Wörterbuch gepackt.
Um die Ausrichtung des Geräts zu ermitteln, überschreiben Sie die Option UIViewController
Methode willAnimateRotationToInterfaceOrientation: Dauer:
indem Sie den folgenden Code in die geschweiften Klammern eingeben. Bei jeder Drehung des Geräts erfolgt die Methode postNotificationWithString:
wird aufgerufen und wird je nach Ausrichtung des Geräts entweder in "Hochformat" oder "Querformat" übergeben.
- (void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientationsdauer: (NSTimeInterval) duration if (interfaceOrientation == UIInterfaceOrientationPortrait) [self postNotificationWithString: @ "Portrait"]; else [self postNotificationWithString: @ "Landscape"];
Die benutzerdefinierte Methode useNotificationWithString:
wurde zuvor deklariert und als Selektor registriert, der bei der Benachrichtigung aufgerufen werden soll. Geben Sie den folgenden Code ein, von dem die Zeichenfolge für die Geräteorientierung abgerufen wird Benutzerinformation
. Durch die Nutzung NSLog
Um den Wert anzuzeigen, protokolliert jede Ausrichtungsänderung, dass eine andere Benachrichtigung gebucht wurde.
- (void) useNotificationWithString: (NSNotification *) notification // Benachrichtigungsmethode und -logik verwenden NSString * key = @ "OrientationStringValue"; NSDictionary * dictionary = [Benachrichtigungsbenutzerinfo]; NSString * stringValueToUse = [dictionary valueForKey: key]; NSLog (@ "Geräteorientierung ->% @", stringValueToUse);
Schließlich muss der Beobachter entfernt werden, wenn das Objekt freigegeben wird. Geben Sie den folgenden Code in das ein Dealloc
Methode:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self];
Wenn du bist ARC nicht verwenden, Sie müssen explizit anrufen [super dealloc]
wie auch so:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self]; [Super Dealloc];
Klicken Sie auf Produkt> Ausführen oder klicken Sie auf den Pfeil "Ausführen" in der oberen linken Ecke. Wenn Sie den iOS-Simulator verwenden, klicken Sie auf Hardware> Nach links drehen, um die Gerätedrehung zu simulieren. Beachten Sie, dass "Geräteorientierung -> Querformat" an der Konsole protokolliert wird.
Das Auslösen von Methoden in nicht verbundenen Objekten würde eine umfangreiche Codierung ohne Benachrichtigungen und das Erfordernis erfordern NSNotificationCenter
. Durch das Hinzufügen von Beobachtern zum Abhören bestimmter Einträge im Benachrichtigungscenter können Ihre Objekte problemlos kommunizieren und Daten übergeben.