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
.
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".
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
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.
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.
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"];
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);
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];
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.
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.