In deze zelfstudie zal ik demonstreren hoe de NSUserDefaults-klasse te gebruiken om applicatie-instellingen op te slaan en bij te werken. In dit proces zullen we een demo-app bouwen met de naam "Contact", die een door de gebruiker geleverde afbeelding en contactgegevens zal opslaan.
Met de klasse NSUserDefaults kunt u instellingen en eigenschappen opslaan die verband houden met applicatie- of gebruikersgegevens. U kunt bijvoorbeeld een profielafbeelding opslaan die is ingesteld door de gebruiker of een standaardkleurenschema voor de toepassing. De objecten worden opgeslagen in wat bekend staat als het iOS? -Standaardsysteem ?. Het iOS-standaardsysteem is beschikbaar in alle code in uw app en eventuele gegevens die zijn opgeslagen in het standaardsysteem blijven bestaan tijdens toepassingssessies. Dit betekent dat zelfs als de gebruiker uw toepassing sluit of de telefoon opnieuw opstart, de opgeslagen gegevens nog steeds beschikbaar zijn de volgende keer dat ze de app openen!
Met NSUserDefaults kunt u objecten uit de volgende klassentypen opslaan:
Als u een ander type object, zoals een UII-afbeelding, wilt opslaan, moet u dit meestal archiveren of verpakken in een exemplaar van NSData, NSNumber of NSString.
Nu u een beetje weet wat er met NSUserDefaults kan worden gedaan, laten we u leren hoe u het standaardsysteem kunt gebruiken met een eenvoudige voorbeeldapp die contactgegevens opslaat.
Open Xcode en selecteer? Een nieuw Xcode-project maken ?. Selecteer een op weergave gebaseerde toepassing en klik op Volgende. Voer een naam in voor uw project (ik heb de mijne genoemd? Contact?). Voer uw bedrijfsidentificatie in en zorg dat u de iPhone selecteert voor apparaatfamilie, want we gaan een iPhone-app maken. Als je klaar bent, klik je op Volgende. Kies een plaats om uw project op te slaan en klik vervolgens op Maken.
In de? Contact? map in de? Project Navigator? klik op ContactViewController.xib.
Sleep drie UITextFields vanuit de bibliotheek naar de weergave en rangschik ze zoals hieronder. Doe hetzelfde met een UIImageView en twee Round Rect-knoppen.
Klik op het eerste tekstveld en typ? Voornaam? in het tekstveld Placeholder. Klik nu op het tweede TextField en typ? Achternaam? in het tekstveld Placeholder. Klik ten slotte op het derde en laatste TextField en typ? Age? in het tekstveld Placeholder. Selecteer Nummerblok voor toetsenbordtype, omdat u alleen cijfers nodig heeft om uw leeftijd in te voeren.
Verander de tekst van de eerste knop in? Opslaan? en de tekst van de tweede knop om? Afbeelding kiezen?.
Nu gaan we de verbindingen maken. Xcode 4 heeft een nieuwe gemakkelijke en snelle manier om dit te doen. Selecteer de middelste knop van de Editor om de? Assistent-editor te tonen?.
Klik op de eerste naam TextField en CTRL-sleep naar de interface. Een pop-up zal weergeven, voer? FirstNameTextField? voor naam en klik op "verbinden".
Doe hetzelfde met de Last name and age Text Field en de UIImageView, maar noem ze lastNameTextField, ageTextField en contactImageView. Voor de knoppen moeten we de verbinding met Action in plaats van Outlet wijzigen. Dus CTRL-sleep van de save-knop naar de interface, maar dit keer onder de accolades. Verander de Connection to Action en voer? Save? In? voor naam. Doe hetzelfde met de knop Afbeelding kiezen, maar voer dit keer in? ChooseImage? voor naam. Nu zou de code van de ContactViewController.h als volgt moeten luiden:
#importeren@interface ContactViewController: UIViewController IBOutlet UIImageView * contactImageView; IBOutlet UITextField * firstNameTextField; IBOutlet UITextField * lastNameTextField; IBOutlet UITextField * ageTextField; - (IBAction) opslaan: (id) afzender; - (IBAction) chooseImage: (id) afzender; @einde
Nu zijn we klaar met de interface. Klik op Build and Run om te zien of het goed werkt. Voer wat tekst in en sluit de app. Als u de app opnieuw opent, ziet u waarschijnlijk dat de tekst die u hebt ingevoerd nog steeds aanwezig is. Als dit het geval is, wordt dit veroorzaakt door de ingebouwde multitasking-functie van iOS. Als u de app uit de multitasking-balk verwijdert en de app opnieuw opent, ziet u dat de door u ingevoerde tekst verdwenen is. In deze zelfstudie gebruiken we NSUserDefaults om de ingevoerde informatie op te slaan, zelfs als u? Echt? sluit de app. Hierdoor blijven de gegevens bestaan uit meerdere sessies.
Schakel terug naar de standaard Editor-modus, zodat u meer ruimte hebt om te werken. Open ContactViewController.h en voeg de UIImagePickerControllerDelegate en de UINavigationControllerDelegate toe.
Als je daarmee klaar bent, open je de ContactViewController.m en scrol je naar de actie ChooseImage en pas je de code aan om deze als volgt te lezen:
- (IBAction) chooseImage: (id) afzender UIImagePickerController * picker = [[[UIImagePickerController alloc] init] autorelease]; picker.delegate = zelf; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController: geanimeerde kiezer: YES];
Eerst maken we een UIImagePickerController, daarna stellen we de gedelegeerde in op zichzelf. Vervolgens schakelen we het bewerken van de gebruiker in, stellen we het brontype in op de fotobibliotheek en ten slotte laten we het met een animatie aan de gebruiker zien.
Kies onder de afbeeldingsactie de volgende afbeeldingsmethoden voor afbeeldingskiezers:
#pragma mark - Image Picker Delegate - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingImage: (UIImage *) beeldbewerkingInfo: (NSDictionary *) editingInfo contactImageView.image = image; [picker dismissModalViewControllerAnimated: YES]; - (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker [picker dismissModalViewControllerAnimated: YES];
In de eerste methode stellen we de image contactImageView in op de geselecteerde afbeelding en vervolgens de UIImagePickerController. In de tweede methode wordt alleen de UIImagePickerController afgedaan.
U kunt tekst opslaan met de functie: setObject: (id) forKey: (NSString *). De sleutel moet een specifieke sleutel zijn voor het object dat u opslaat, omdat u die sleutel ook nodig hebt om de opgeslagen gegevens op te halen. U kunt gehele getallen opslaan met de functie: setInteger: (NSInteger) forKey: (NSString *). Om de afbeelding op te slaan, moeten we er eerst een exemplaar van NSData van maken.
Ga naar de bewaaractie en pas de code als volgt aan:
- (IBAction) opslaan: (id) afzender // Verberg het toetsenbord [firstNameTextField resignFirstResponder]; [lastNameTextField resignFirstResponder]; [ageTextField resignFirstResponder]; // Maak strings en integer om de tekstinfo op te slaan NSString * firstName = [firstNameTextField-tekst]; NSString * lastName = [lastNameTextField-tekst]; int age = [[ageTextField text] integerValue]; // Maak instances van NSData UIImage * contactImage = contactImageView.image; NSData * imageData = UIImageJPEGRepresentation (contactImage, 100); // Sla de gegevens op NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [standaardinstellingen setObject: firstName forKey: @ "firstName"]; [standaardinstellingen setObject: lastName forKey: @ "achternaam"]; [standaardinstellingen setInteger: age forKey: @ "age"]; [standaardinstellingen setObject: imageData forKey: @ "image"]; [standaardsynchronisatie]; NSLog (@ "Gegevens opgeslagen");
Eerst verbergen we het toetsenbord. Vervolgens maken we reeksen van de tekst die u hebt ingevoerd in het tekstveld voor de eerste en de laatste naam. We maken ook een geheel getal van de door u ingevoerde leeftijd. Dan slaan we de afbeelding van contactImageView op als een NSData-object, omdat we een UIImage niet rechtstreeks met NSUserDefaults kunnen opslaan. Vervolgens slaan we de gegevens op, we noemen de standaardgebruikersdefaultsfunctie om daarin gegevens op te slaan. Eindelijk synchroniseren we de database standardUserDefaults.
Eindelijk willen we de opgeslagen gegevens ophalen. We doen dit in de methode viewDidLoad, omdat die methode wordt aangeroepen wanneer de toepassing wordt geopend. Scroll naar beneden naar de? ViewDidLoad? methode, uncomment het, en verander de code als volgt:
- (void) viewDidLoad // Verkrijg de opgeslagen gegevens voordat het beeld laadt NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; NSString * firstName = [standaardwaarden objectForKey: @ "firstName"]; NSString * lastName = [standaardwaarden objectForKey: @ "achternaam"]; int age = [standaard integerForKey: @ "age"]; NSString * ageString = [NSString stringWithFormat: @ "% i", age]; NSData * imageData = [standaard gegevensForKey: @ "image"]; UIImage * contactImage = [UIImage imageWithData: imageData]; // Werk de UI-elementen bij met de opgeslagen gegevens firstNameTextField.text = firstName; lastNameTextField.text = lastName; ageTextField.text = ageString; contactImageView.image = contactImage; [super viewDidLoad];
Eerst bellen we opnieuw de standaardUserDefaults-functie, zodat we de opgeslagen gegevens kunnen ophalen. We plaatsen de voor- en achternaam in een NSString. Hoewel de leeftijd een geheel getal is, maken we een tekenreeks om deze op te slaan, omdat we de tekst van een TextField niet rechtstreeks op een geheel getal kunnen instellen. We plaatsen de afbeelding in een NSData-object en maken vervolgens een UII-bestand van het object NSData. Ten slotte werken we het UI-element bij met de opgeslagen gegevens.
Nu de app klaar is, bouw hem opnieuw op en voer hem uit. Voer uw gegevens in en selecteer een afbeelding. Sluit de app in de multitaskingbalk en open de app opnieuw. De gegevens zouden er deze keer nog moeten zijn, en zo ja, onze demo-app werkt!
Bedankt voor het lezen van deze tutorial over NSUserDefaults! Als u vragen of opmerkingen over deze zelfstudie hebt, laat ze dan in de opmerkingen hieronder staan!
En als je je als iOS-ontwikkelaar wilt verbeteren, kun je het enorme aanbod iOS-app-sjablonen op Envato Market bekijken. Je kunt ze gebruiken als basis voor het ontwikkelen van je eigen apps, maar ook om de code gecontroleerd op kwaliteit te controleren en ervan te leren.
Of blader door de app-ontwikkelingsservices op Envato Studio om een app voor u te maken van begin tot einde!
App-ontwikkelingsservices op Envato Studio