In de snelle tip van vandaag leert u meer over de klasse NSNotification tijdens het bouwen van een demoproject om wijzigingen in de apparaatoriëntatie te controleren. Laten we beginnen!
Bestellen vanuit een food cart lijkt veel op werken met een NSNotification
. U loopt naar de toonbank, plaatst uw bestelling, krijgt een nummer en wacht tot uw nummer wordt gebeld. Je staat meestal bij vijf andere mensen die wachten op het bellen van hun nummer. En wanneer de chef klaar is met het bereiden van uw maaltijd, belt de persoon achter de toonbank uw nummer en gaat u zitten om te eten. Met NSNotification
, je wordt een waarnemer voor 'jouw nummer' en wanneer het object dat de melding plaatst, klaar is 'je eten maken', NSNotificationCenter
belt uw nummer zodat u uw "voedsel" kunt komen halen. In deze zelfstudie gaan we in plaats van te wachten op eten wachten tot het apparaat draait en vervolgens de huidige richting naar de waarnemer sturen. We zullen het hebben over het registreren om een melding te ontvangen, een melding te plaatsen en een tekenreeksobject door te geven samen met de melding via gebruikers informatie
.
Start Xcode en klik op Bestand> Nieuw> Project. Selecteer een iOS Single View-toepassing en klik op "Volgende". Geef uw product 'Meldingen' een naam en voer een naam in voor uw bedrijfsidentificatie, zoals 'com.companyName.notifications'. Kies de iPhone-apparaatfamilie en klik op "Volgende". Kies een locatie om uw project op te slaan en klik op 'Maken'.
Verklaar de methoden voor het plaatsen en ontvangen van de melding door de volgende code in het bestand "ViewController.m" in te voeren.
@interface ViewController () - (ongeldig) postNotificationWithString: (NSString *) oriëntatie; - (ongeldig) useNotificationWithString: (NSNotification *) melding; @einde
Nu kunnen we het ViewController
object om meldingen te ontvangen. Typ de volgende code in de viewDidLoad
methode.
NSString * notificationName = @ "MTPostNotificationTut"; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (useNotificationWithString :) name: notification Name object: nil];
Er zijn vier belangrijke delen van de NSNotificationCenter
methode addObserver: selector: naam: object:
. Het argument voor addObserver:
is het object dat wil weten wanneer een bepaalde melding plaatsvindt. Het argument voor selector:
is de methode die wordt aangeroepen wanneer de melding plaatsvindt. Het argument voor naam:
is de titel van de melding die de waarnemer wil weten; het moet uniek zijn. Het laatste stukje van de methode is voorwerp:
. Het argument is het object dat bij de kennisgeving hoort en is vaak nul
afhankelijk van de context van de melding.
Vervolgens genereren we de logica voor het plaatsen van een melding. Typ de volgende code in het bestand "ViewController.m". De aangepaste methode postNotificationWithString:
dat eerder werd verklaard, neemt één argument dat de oriëntatie van het apparaat vertegenwoordigt.
- (ongeldig) postNotificationWithString: (NSString *) oriëntatie // berichtmeldingsmethode en logica NSString * notificationName = @ "MTPostNotificationTut"; NSString * -sleutel = @ "OrientationStringValue"; NSDictionary * dictionary = [NSDictionary woordenboekWithObject: orientation forKey: key]; [[NSNotificationCenter defaultCenter] postNotificationName: notificationName object: nil userInfo: dictionary];
Er zijn drie belangrijke delen van de NSNotificationCenter
methode postNotificationName: object: userinfo:
. Het argument voor postNotificationName:
is de titel van de melding die in de vorige is geregistreerd addObserver: selector: naam: object:
methode. Het argument voor voorwerp:
, nogmaals, is het object dat de melding plaatst en in dit geval is het nul
. Het argument voor gebruikers informatie
is een NSDictionary
die kan worden gebruikt om aanvullende informatie met de kennisgeving te verzenden. gebruikers informatie
kan zijn nul
, maar in dit geval willen we de oriëntatie van het apparaat weten. Om het met de kennisgeving te verzenden, is de informatie verpakt in een woordenboek.
Om de oriëntatie van het apparaat te krijgen, overschrijft u de UIViewController
methode willAnimateRotationToInterfaceOrientation: Duur:
door de volgende code in de accolades te typen. Elke keer dat het apparaat wordt gedraaid, de methode postNotificationWithString:
wordt opgeroepen en geeft ofwel "Portret" of "Landschap" door, afhankelijk van de richting van het apparaat.
- (void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientatieduur: (NSTimeInterval) duur if (interfaceOrientation == UIInterfaceOrientationPortrait) [self postNotificationWithString: @ "Portrait"]; else [self postNotificationWithString: @ "Landscape"];
De aangepaste methode useNotificationWithString:
is eerder gedeclareerd en geregistreerd als de selector die moet worden opgeroepen wanneer de melding plaatsvindt. Typ de volgende code waardoor de apparaatrichtingsreeks uitkomt gebruikers informatie
. Door het gebruiken van NSLog
om de waarde ervan weer te geven, worden voor elke wijziging in oriëntatieverandering een andere melding verzonden.
- (ongeldig) useNotificationWithString: (NSNotification *) notificatie // gebruik meldingsmethode en logica NSString * key = @ "OrientationStringValue"; NSDictionary * dictionary = [notification userInfo]; NSString * stringValueToUse = [woordenboekwaardeForKey: sleutel]; NSLog (@ "Apparaatoriëntatie ->% @", stringValueToUse);
Ten slotte moet de waarnemer worden verwijderd wanneer het object wordt verwijderd. Typ de volgende code in de dealloc
methode:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self];
Als je bent geen ARC gebruiken, u moet expliciet bellen [super dealloc]
zo ook, zoals zo:
- (void) dealloc [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc];
Klik op Product> Uitvoeren of klik op de pijl "Uitvoeren" in de linkerbovenhoek. Als u de iOS-simulator gebruikt, klikt u op Hardware> Links roteren om de apparaatrotatie te simuleren. Merk op dat "Device orientation -> Landscape" op de console is vastgelegd.
Triggering methoden in losgekoppelde objecten vereisen een flinke codering zonder meldingen en de NSNotificationCenter
. Door waarnemers toe te voegen om naar specifieke berichten in het meldingscentrum te luisteren, kunnen uw objecten gemakkelijk communiceren en gegevens doorgeven.