I dagens snabba tips läser du om NSNotification-klassen när du bygger ett demoprojekt för att övervaka förändringar i enhetens orientering. Låt oss börja!
Beställa från en matvagn är mycket som att arbeta med en NSNotification
. Du går till disken, lägger din beställning, får ett nummer och väntar på att ditt nummer ska ringas. Du står vanligtvis med fem andra personer som väntar på att deras nummer ska ringas. Och när kocken är färdig med att förbereda din måltid, ringer personen bakom räknaren ditt nummer, och du sätter dig ner för att äta. Med NSNotification
, du blir en observatör för "ditt nummer" och när objektet som skickar meddelandet är gjort "gör din mat" NSNotificationCenter
Ringer ditt nummer så att du kan få din "mat". I denna handledning, istället för att vänta på mat, kommer vi att vänta på att enheten roterar och sedan skicka den aktuella orienteringen till observatören. Vi pratar om hur du registrerar dig för att få en anmälan, skicka en anmälan och skicka ett strängobjekt tillsammans med meddelandet med användarinformation
.
Starta Xcode och klicka på Arkiv> Nytt> Projekt. Välj ett iOS Single View-program och klicka på "Nästa". Ange din produkt "Notifieringar" och ange ett namn för ditt företagsidentifierare, till exempel "com.companyName.notifications." Välj iPhone-enheten och klicka på "Nästa". Välj en plats för att lagra ditt projekt och klicka på "Skapa".
Förklara metoderna för att skicka och ta emot anmälan genom att skriva följande kod i filen "ViewController.m".
@interface ViewController () - (void) postNotificationWithString: (NSString *) orientering; - (void) useNotificationWithString: (NSNotification *) anmälan; @slutet
Nu kan vi registrera ViewController
motsätta sig för att få meddelanden. Skriv följande kod i viewDidLoad
metod.
NSString * notificationName = @ "MTPostNotificationTut"; [[NSNotificationCenter defaultCenter] addObserver: självväljare: @selector (useNotificationWithString :) namn: notificationName object: nil];
Det finns fyra viktiga delar av NSNotificationCenter
metod addObserver: väljaren: namn: objekt:
. Argumentet för addObserver:
är objektet som vill veta när en viss anmälan händer. Argumentet för väljare:
är den metod som kallas när anmälan händer. Argumentet för namn:
är titeln på den anmälan som observatören vill veta om; Det måste vara unikt. Den sista delen av metoden är objekt:
. Dess argument är föremålet för anmälan och är ofta noll
beroende på sammanhanget av anmälan.
Därefter genererar vi logiken för att skicka en anmälan. Skriv följande kod i filen "ViewController.m". Den anpassade metoden postNotificationWithString:
Det som förklarades tidigare tar ett argument som representerar anordningens orientering.
- (void) postNotificationWithString: (NSString *) orientering // postnotifieringsmetod och logik NSString * notificationName = @ "MTPostNotificationTut"; NSString * key = @ "OrientationStringValue"; NSDictionary * dictionary = [NSDictionary dictionaryWithObject: orientering förKey: nyckel]; [[NSNotificationCenter defaultCenter] postNotificationName: notificationName objekt: nil userInfo: dictionary];
Det finns tre viktiga delar av NSNotificationCenter
metod postNotificationName: objekt: Userinfo:
. Argumentet för postNotificationName:
är titeln på den anmälan som registrerades i det föregående addObserver: väljaren: namn: objekt:
metod. Argumentet för objekt:
, igen är objektet som skickar meddelandet och i detta fall är noll
. Argumentet för användarinformation
är en NSDictionary
som kan användas för att skicka ytterligare information med meddelandet. användarinformation
kan vara noll
, men i detta fall vill vi veta enhetens orientering. För att skicka den med anmälan packas informationen in i en ordlista.
För att få enhetens orientering, åsidosätta UIViewController
metod willAnimateRotationToInterfaceOrientation: varaktighet:
genom att skriva följande kod inuti hävarmen. Varje gång enheten roteras, används metoden postNotificationWithString:
kallas och skickas i antingen "Porträtt" eller "Landskap" beroende på enhetens orientering.
- (tomt) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration if (interfaceOrientation == UIInterfaceOrientationPortrait) [self postNotificationWithString: @ "Portrait"]; else [self postNotificationWithString: @ "Landscape"];
Den anpassade metoden useNotificationWithString:
förklarades tidigare och registrerades som väljare som ska ringas när anmälan händer. Skriv följande kod som får enhetens orienteringssträng från användarinformation
. Genom att använda NSLog
För att visa sitt värde loggar varje orienteringsändring att en annan anmälan har lagts upp.
- (void) useNotificationWithString: (NSNotification *) notification // använd anmälningsmetod och logik NSString * key = @ "OrientationStringValue"; NSDictionary * dictionary = [notification userInfo]; NSString * stringValueToUse = [ordbok valueForKey: key]; NSLog (@ "Enhetsorientering ->% @", stringValueToUse);
Slutligen måste observatören avlägsnas när objektet är fördelat. Skriv följande kod i dealloc
metod:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self];
Om du är använder inte ARC, du måste uttryckligen ringa [super dealloc]
liksom, så här:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc];
Klicka på Produkt> Kör eller klicka på "Kör" -pilen längst upp till vänster. Om du använder iOS-simulatorn klickar du på Hårdvara> Rotera vänster för att simulera rotationen av enheten. Observera att "Device Orientation -> Landscape" är inloggad i konsolen.
Utlösningsmetoder i bortkopplade objekt skulle kräva en viss kraftig kodning utan meddelanden och NSNotificationCenter
. Genom att lägga till observatörer för att lyssna på specifika inlägg till anmälningscentralen kan dina objekt kommunicera och skicka data enkelt.