În sfatul de astăzi rapid, veți afla despre clasa NSNotification în timp ce construiți un proiect demo pentru a monitoriza modificările în orientarea dispozitivului. Să începem!
Comandarea de la un cărucior de alimente este foarte asemănătoare cu cea a unui serviciu NSNotification
. Mergeți la tejghea, plasați comanda, primiți un număr și așteptați ca numărul dvs. să fie sunat. De obicei, stați în picioare cu alte cinci persoane care așteaptă să fie numite și numărul lor. Și când bucătarul este pregătit să vă pregătească masa, persoana din spatele tejghelei vă cheamă numărul și vă așezați să mâncați. Cu NSNotification
, deveniți un observator pentru "numărul dvs." și când obiectul postării notificării se face "făcându-vă alimentele" NSNotificationCenter
sună numărul tău, ca să poți veni să-ți iei "mâncarea". În acest tutorial, în loc să așteptăm mâncarea, vom aștepta ca dispozitivul să se rotească și apoi să trimită orientarea actuală observatorului. Vom vorbi despre cum să vă înregistrați pentru a primi o notificare, să postați o notificare și să transmiteți un obiect șir împreună cu notificarea utilizând userinfo
.
Lansați Xcode și faceți clic pe File> New> Project. Selectați o aplicație pentru vizualizare unică iOS și faceți clic pe "Următorul". Denumiți produsul "Notificări" și introduceți un nume pentru identificatorul companiei dvs., cum ar fi "com.companyName.notifications". Alegeți familia de dispozitive iPhone și faceți clic pe "Next". Alegeți o locație pentru stocarea proiectului și faceți clic pe "Creați".
Declarați metodele utilizate pentru a posta și primi notificarea introducând următorul cod în fișierul "ViewController.m".
@ interfata ViewController () - (void) postNotificationWithString: (NSString *) orientare; - (void) useNotificationWithString: (NSNotification *) notificare; @Sfârșit
Acum putem înregistra ViewController
obiect pentru a primi notificări. Introduceți codul următor în viewDidLoad
metodă.
NSString * notificationName = "MTPostNotificationTut"; [[NSNotificationCenter defaultCenter] addObserver: selector auto: @selector (useNotificationWithString :) name: notificationName object: nil];
Există patru părți importante din NSNotificationCenter
metodă addObserver: selector: Nume: obiect:
. Argumentul pentru addObserver:
este obiectul care dorește să știe când are loc o anumită notificare. Argumentul pentru selector:
este metoda primită atunci când se produce notificarea. Argumentul pentru Nume:
este titlul notificării pe care observatorul dorește să o cunoască; trebuie să fie unic. Ultima piesă a metodei este obiect:
. Argumentul său este obiectul atașat la notificare și este deseori zero
în funcție de contextul notificării.
Apoi vom genera logica pentru a trimite o notificare. Tastați următorul cod în fișierul "ViewController.m". Metoda personalizată postNotificationWithString:
care a fost declarat mai devreme, are un argument care reprezintă orientarea dispozitivului.
- (void) postNotificationWithString: orientare (NSString *) // metoda post-notificare și logica NSString * notificationName = @ "MTPostNotificationTut"; NSString * cheie = @ "OrientationStringValue"; NSDictionary * dicționar = [dicționar NSDictionaryWithObject: orientare pentru cheie: cheie]; [[NSNotificationCenter defaultCenter] postNotificationName: NotificareName object: null userInfo: dictionary];
Există trei părți importante din NSNotificationCenter
metodă postNotificationName: obiect: userinfo:
. Argumentul pentru postNotificationName:
este titlul notificării care a fost înregistrată în versiunea precedentă addObserver: selector: Nume: obiect:
metodă. Argumentul pentru obiect:
, din nou, este obiectul postării notificării și în acest caz este zero
. Argumentul pentru userinfo
este un NSDictionary
care pot fi folosite pentru a trimite informații suplimentare cu notificarea. userinfo
poate fi zero
, dar în acest caz dorim să cunoaștem orientarea dispozitivului. Pentru a le trimite cu notificarea, informațiile sunt ambalate în interiorul unui dicționar.
Pentru a obține orientarea dispozitivului, înlocuiți-l UIViewController
metodă willAnimateRotationToInterfaceOrientation: Durata:
prin tastarea următorului cod în interiorul bretelelor. De fiecare dată când dispozitivul este rotit, metoda postNotificationWithString:
este apelat și trece în modul "Portret" sau "Peisaj" în funcție de orientarea dispozitivului.
- (void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfataOrientare durata: (NSTimeInterval) durata if (interfaceOrientation == UIInterfaceOrientationPortrait) [auto postNotificationWithString: @ "Portret"]; altceva [self postNotificationWithString: @ "Peisaj"];
Metoda personalizată useNotificationWithString:
a fost declarată mai devreme și înregistrată ca selector care trebuie apelat la notificare. Tastați următorul cod care va primi șirul de orientare al dispozitivului userinfo
. Prin utilizarea NSLog
pentru a afișa valoarea sa, fiecare schimbare de orientare înregistrează o nouă notificare.
- (void) useNotificationWithString: (NSNotification *) notificare // folosiți metoda de notificare și logica NSString * key = @ "OrientationStringValue"; NSDictionary * dicționar = [notificare userInfo]; NSString * stringValueToUse = [valoarea dicționaruluiForKey: cheie]; NSLog (@ "Orientare dispozitiv ->% @", stringValueToUse);
În cele din urmă, observatorul trebuie să fie eliminat atunci când obiectul este dealocat. Introduceți codul următor în dealloc
metodă:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: auto];
Daca esti care nu utilizează ARC, va trebui să apelați în mod explicit [super dealloc]
precum și:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: auto]; [super dealloc];
Faceți clic pe Produs> Executare sau faceți clic pe săgeata "Rulare" în colțul din stânga sus. Dacă utilizați Simulatorul iOS, faceți clic pe Hardware> Rotire stânga pentru a simula rotirea dispozitivului. Observați că "orientarea dispozitivului -> peisaj" este înregistrată în consola.
Metodele de declanșare în obiecte deconectate ar necesita o codificare gravă fără notificări și NSNotificationCenter
. Prin adăugarea de observatori pentru a asculta postări specifice către centrul de notificare, obiectele dvs. pot comunica cu ușurință și pot transmite datele.