I denne veiledningen vil jeg demonstrere hvordan jeg bruker NSUserDefaults-klassen for å lagre og oppdatere programinnstillinger. I prosessen vil vi bygge en demo-app kalt "Kontakt" som vil lagre et bruker-gitt bilde og kontaktinformasjon.
Med NSUserDefaults-klassen kan du lagre innstillinger og egenskaper relatert til applikasjons- eller brukerdata. For eksempel kan du lagre et profilbilde som er angitt av brukeren eller et standardfargevalg for applikasjonen. Objektene vil bli lagret i det som kalles iOS-standardinnstillingene ?. IOS standard-systemet er tilgjengelig i hele koden i appen din, og alle data som er lagret i standardinnstillingene, vil fortsette gjennom programmøter. Dette betyr at selv om brukeren lukker programmet eller starter telefonen på nytt, vil de lagrede dataene fortsatt være tilgjengelige neste gang de åpner appen!
Med NSUserDefaults kan du lagre objekter fra følgende klassetyper:
Hvis du vil lagre andre typer objekter, for eksempel en UIImage, må du vanligvis arkivere den eller pakke den inn i en forekomst av NSData, NSNumber eller NSString.
Nå som du vet litt om hva som kan gjøres med NSUserDefaults, la oss hoppe til å lære hvordan du bruker standardinnstillingene med en enkel prøveapp som lagrer kontaktinformasjon.
Åpne Xcode og velg? Opprett et nytt Xcode-prosjekt ?. Velg et visningsbasert program og klikk på Neste. Skriv inn et navn på prosjektet ditt (jeg har kalt min? Kontakt?). Skriv inn din firmaidentifikator og kontroller at du velger iPhone for enhetsfamilie, fordi vi skal lage en iPhone-app. Hvis du er ferdig, klikker du på neste. Velg et sted for å lagre prosjektet ditt og klikk deretter opprett.
I? Kontakt? mappe i "Project Navigator"? klikk på ContactViewController.xib.
Dra tre UITextFields fra biblioteket til visningen og ordne dem som nedenfor. Gjør det samme med en UIImageView og to runde Rect-knapper.
Klikk Den første TextField og type? Fornavn? i plassholder-tekstfeltet. Klikk nå den andre TextField og type? Etternavn? i plassholder-tekstfeltet. Endelig klikker du den tredje og siste TextField og type? Alder? i plassholder-tekstfeltet. For tastaturtype, velg Nummerpute, fordi du bare trenger tall for å angi alderen din.
Endre teksten til den første knappen til? Lagre? og teksten til den andre knappen til? Velg bilde?.
Nå skal vi gjøre tilkoblingene. Xcode 4 har en ny, enkel og rask måte å gjøre det på. Velg mellomknappen på redigeringsprogrammet for å vise? Assistent-redaktøren?.
Klikk på fornavnet TextField og CTRL-dra til grensesnittet. En popup vil vise, skriv? FirstNameTextField? for navn og klikk "connect."
Gjør det samme med etternavn og alder tekstfelt og UIImageView, men ring dem lastNameTextField, ageTextField og contactImageView. For knappene må vi endre tilkoblingen til Handling i stedet for Outlet. Så CTRL-dra fra lagre-knappen til grensesnittet, men denne gangen under de krøllete båndene. Endre tilkoblingen til handling og skriv inn? Lagre? for navn. Gjør det samme med knappen Velg bilde, men denne gangen skriver du inn? ChooseImage? for navn. Nå skal koden til ContactViewController.h lese som følger:
#importere@interface ContactViewController: UIViewController IBOutlet UIImageView * contactImageView; IBOutlet UITextField * firstNameTextField; IBOutlet UITextField * lastNameTextField; IBOutlet UITextField * ageTextField; - (IBAction) lagre: (id) avsender; - (IBAction) chooseImage: (id) avsender; @slutt
Nå er vi ferdige med grensesnittet. Klikk på Bygg og kjør for å se om det går bra. Skriv inn tekst og lukk appen. Hvis du åpner appen på nytt, ser du sannsynligvis at teksten du skrev inn fortsatt er der. I så fall er dette forårsaket av den innebygde multitasking-funksjonen til iOS. Hvis du sletter appen fra multitaskingslinjen og åpner appen igjen, ser du at teksten du skrev inn, er borte. I denne opplæringen bruker vi NSUserDefaults for å lagre informasjonen som er oppgitt selv om du? Virkelig? lukk appen. Dette vil tillate at dataene fortsetter gjennom flere økter.
Bytt tilbake til standardredigeringsmodus, slik at du har mer plass til å jobbe innenfor. Åpne ContactViewController.h og legg til UIImagePickerControllerDelegate og UINavigationControllerDelegate.
Hvis du er ferdig med det, åpner du ContactViewController.m og ruller ned til SelectImage-handlingen og endrer koden for å lese som følger:
- (IBAction) chooseImage: (id) avsender UIImagePickerController * picker = [[[UIImagePickerController alloc] init] autorelease]; picker.delegate = self; picker.allowsEditing = JA; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [selvtillitModalViewController: Plukker animert: JA];
Først oppretter vi en UIImagePickerController, så setter vi delegaten til seg selv. Deretter aktiverer vi brukerredigering, sett deretter kilde typen til fotobiblioteket, og til slutt viser vi det med en animasjon til brukeren.
Under valg av bildehandling, annonserer følgende bildevalgs metoder:
#pragma mark - Image Picker Delegate - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingImage: (UIImage *) bilde redigeringInfo: (NSDictionary *) editingInfo contactImageView.image = image; [plukkeren avviserModalViewControllerAnimated: YES]; - (void) imagePickerControllerDidCancel: (UIImagePickerController *) plukkeren [picker dismissModalViewControllerAnimated: YES];
I den første metoden stiller vi kontakten ImageView-bildet til det valgte bildet og avviser deretter UIImagePickerController. I den andre metoden avviser vi bare UIImagePickerController.
Du kan lagre tekst med funksjonen: setObject: (id) forKey: (NSString *). Nøkkelen må være en bestemt nøkkel for objektet du lagrer fordi du også trenger den nøkkelen for å få lagrede data. Du kan lagre heltall med funksjonen: setInteger: (NSInteger) forKey: (NSString *). For å lagre bildet må vi først opprette en forekomst av NSData fra den.
Gå til lagrehandlingen og endre koden for å lese som følger:
- (IBAction) lagre: (id) avsender // Skjul tastaturet [firstNameTextField resignFirstResponder]; [lastNameTextField resignFirstResponder]; [ageTextField resignFirstResponder]; // Lag strenge og heltall for å lagre tekstinfo NSString * firstName = [firstNameTextField text]; NSString * lastName = [lastNameTextField tekst]; int alder = [[ageTextField tekst] integerValue]; // Opprett forekomster av NSData UIImage * contactImage = contactImageView.image; NSData * imageData = UIImageJPEGRepresentation (contactImage, 100); // Lagre data NSUserDefaults * standard = [NSUserDefaults standardUserDefaults]; [standard settObject: firstName forKey: @ "firstName"]; [standard settObject: LastName forKey: @ "etternavn"]; [standardinnstillinger setInteger: alder forKey: @ "alder"]; [standardinnstillinger setObject: imageData forKey: @ "image"]; [standard synkronisere]; NSLog (@ "Data lagret");
Først skjuler vi tastaturet. Deretter lager vi strenge av teksten du skrev inn i tekstfeltet for første og etternavn. Vi lager også et heltall av alderen du skrev inn. Når vi lagrer bildet fra contactImageView som et NSData-objekt, fordi vi ikke kan lagre en UIImage direkte med NSUserDefaults. Da lagrer vi dataene, vi kaller standardUserDefaults-funksjonen for å lagre data i den. Endelig synkroniserer vi standardBrugerDefaults-databasen.
Til slutt ønsker vi å få de lagrede dataene. Vi gjør dette i viewDidLoad-metoden, fordi denne metoden kalles når applikasjonen åpnes. Rull ned til? ViewDidLoad? metode, uncoment det, og endre koden som følger:
- (void) viewDidLoad // Få de lagrede dataene før visningen laster NSUserDefaults * standard = [NSUserDefaults standardUserDefaults]; NSString * firstName = [standard objektForKey: @ "firstName"]; NSString * lastName = [standard objektForKey: @ "etternavn"]; int alder = [standard integerForKey: @ "age"]; NSString * ageString = [NSString stringWithFormat: @ "% i", alder]; NSData * imageData = [standard dataForKey: @ "image"]; Ullmage * contactImage = [UIImage imageWithData: imageData]; // Oppdater UI-elementene med de lagrede data firstNameTextField.text = firstName; lastNameTextField.text = LastName; ageTextField.text = ageString; contactImageView.image = contactImage; [super viewDidLoad];
Først kaller vi standardUserDefaults-funksjonen igjen, slik at vi kan få de lagrede dataene. Vi legger for- og etternavnet i en NSString. Selv om alderen er et heltall, lager vi en streng for å lagre den, fordi vi ikke direkte kan sette teksten til et TextField til et heltall. Vi legger bildet i et NSData-objekt, og deretter lager vi en UIImage fra NSData-objektet. Endelig oppdaterer vi brukergrensesnittelementet med de lagrede dataene.
Nå som appen er ferdig, bygg og kjør den igjen. Skriv inn dataene dine og velg et bilde. Lukk appen fra multitaskingslinjen, og åpne appen på nytt. Dataene skal fortsatt være der denne gangen, og i så fall fungerer vår demo-app!
Takk for at du leser denne veiledningen om NSUserDefaults! Hvis du har spørsmål eller kommentarer til denne opplæringen, legg dem i kommentarfeltet nedenfor!
Og hvis du vil forbedre som en iOS-utvikler, hvorfor ikke sjekk ut det store spekteret av iOS-appmaler på Envato Market? Du kan bruke dem som en base for å utvikle dine egne apper, samt å inspisere den kvalitetskontrollerte koden og lære av den.
Eller bla gjennom utviklingstjenestene på Envato Studio for å få en app laget for deg fra start til slutt!
App utviklingstjenester på Envato Studio