iOS SDK NSNotification

I dagens raske tips lærer du om NSNotification-klassen mens du bygger et demo-prosjekt for å overvåke endringer i enhetens retning. La oss komme i gang!

Bestilling fra en matkurv er som å jobbe med en NSNotification. Du går opp til disken, legger bestillingen din, får et nummer, og vent på at nummeret ditt skal ringes. Du står vanligvis med fem andre folk som venter på at deres nummer skal kalles også. Og når kokken er ferdig med å forberede måltidet, ringer personen bak disken tallet ditt, og du setter deg ned for å spise. Med NSNotification, du blir en observatør for "ditt nummer", og når objektet som legger inn varselet er gjort "lager mat" NSNotificationCenter ringer nummeret ditt slik at du kan få din "mat". I denne opplæringen, i stedet for å vente på mat, skal vi vente på at enheten skal rotere og deretter sende den nåværende orienteringen til observatøren. Vi snakker om hvordan du registrerer deg for å motta varsel, legge inn et varsel og sende et strengobjekt sammen med varselet ved hjelp av brukerinformasjon.


Trinn 1: Konfigurer prosjektet

Start Xcode og klikk på File> New> Project. Velg et iOS enkeltvisningsprogram og klikk på "Neste". Gi navnet ditt produkt "Varsler" og skriv inn et navn for firmaidentifikatoren, for eksempel "com.companyName.notifications." Velg iPhone-enheten, og klikk på "Neste". Velg et sted for å lagre prosjektet ditt og klikk "Opprett".


Trinn 2: Registrer deg for å motta en melding

Erklære metodene som brukes til å legge inn og motta varselet ved å skrive følgende kode i "ViewController.m" -filen.

 @interface ViewController () - (void) postNotificationWithString: (NSString *) orientering; - (void) useNotificationWithString: (NSNotification *) varsel; @slutt

Motta varselet

Nå kan vi registrere ViewController Motta for å motta varsler. Skriv inn følgende kode i viewDidLoad metode.

 NSString * notificationName = @ "MTPostNotificationTut"; [[NSNotificationCenter defaultCenter] addObserver: selvvelger: @selector (useNotificationWithString :) navn: meldingnavn objekt: null];

Det er fire viktige deler av NSNotificationCenter metode addObserver: Velger: navn: objekt:. Argumentet for addObserver: er objektet som vil vite når et bestemt varsel skjer. Argumentet for velger~~POS=HEADCOMP: er metoden som blir kalt når varslingen skjer. Argumentet for Navn: er tittelen på varselet som observatøren ønsker å vite om; det må være unikt. Den endelige delen av metoden er gjenstand:. Dets argument er objektet knyttet til varselet og er ofte nil avhengig av konteksten til varselet.


Trinn 3: Legg inn en varsel

Deretter genererer vi logikken for å legge ut et varsel. Skriv inn følgende kode i filen "ViewController.m". Den tilpassede metoden postNotificationWithString: Det ble erklært tidligere tar ett argument som representerer orienteringen til enheten.

 - (void) postNotificationWithString: (NSString *) orientering // postvarslingsmetode og logikk NSString * notificationName = @ "MTPostNotificationTut"; NSString * nøkkel = @ "OrientationStringValue"; NSDictionary * ordbok = [NSDictionary dictionaryWithObject: orientation forKey: key]; [[NSNotificationCenter defaultCenter] postNotificationName: notificationName objekt: null brukerInfo: ordbok]; 

Det er tre viktige deler av NSNotificationCenter metode postNotificationName: objekt: Userinfo:. Argumentet for postNotificationName: er tittelen på varselet som ble registrert i det forrige addObserver: Velger: navn: objekt: metode. Argumentet for gjenstand:, igjen, er objektet som legger inn varselet og i dette tilfellet er nil. Argumentet for brukerinformasjon er en NSDictionary som kan brukes til å sende ytterligere opplysninger med varselet. brukerinformasjon kan være nil, men i dette tilfellet vil vi vite orienteringen til enheten. For å sende den med varselet blir informasjonen pakket inn i en ordbok.

Få enhetens orientering

For å få enhetens orientering, overstyrer du UIViewController metode willAnimateRotationToInterfaceOrientation: varighet: ved å skrive følgende kode inne i bøylene. Hver gang enheten roteres, må metoden postNotificationWithString: kalles og går i enten "Portrett" eller "Landskap" avhengig av enhetens orientering.

 - (ugyldig) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) grensesnittOrientasjonsvarighet: (NSTimeInterval) varighet hvis (interfaceOrientation == UIInterfaceOrientationPortrait) [self postNotificationWithString: @ "Portrait"];  ellers [selv postnoteringWithString: @ "Landscape"]; 

Bruke varslingen

Den tilpassede metoden useNotificationWithString: ble erklært tidligere og registrert som väljare som skal ringes når varslingen skjer. Skriv inn følgende kode som får enhetens orienteringsstreng fra brukerinformasjon. Ved bruk av NSLog For å vise verdien, logger hver orienteringsendring at et annet varsel er lagt ut.

 - (void) useNotificationWithString: (NSNotification *) varsling // bruk varslingsmetode og logikk NSString * key = @ "OrientationStringValue"; NSDictionary * ordbok = [varsel brukerInfo]; NSString * stringValueToUse = [ordbok valueForKey: key]; NSLog (@ "Enhetsorientering ->% @", stringValueToUse); 

Minnehåndtering

Til slutt må observatøren bli fjernet når objektet er allokert. Skriv inn følgende kode i dealloc metode:

 - (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self]; 

Hvis du er bruker ikke ARC, du må eksplisitt ringe [super dealloc] så vel som slik:

 - (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc]; 

Trinn 4: Kjør prosjektet

Klikk på Produkt> Kjør, eller klikk på pilen "Kjør" øverst i venstre hjørne. Hvis du bruker iOS-simulatoren, klikker du på Maskinvare> Roter til venstre for å simulere enhetsrotasjon. Legg merke til at "Device orientation -> Landscape" er logget til konsollen.


Konklusjon

Utløsningsmetoder i frakoblede objekter vil kreve noe heftig koding uten varsler og NSNotificationCenter. Ved å legge til observatører for å lytte etter bestemte innlegg i varslingssenteret, kan objektene dine kommunisere og sende data enkelt.