I denna handledning kommer jag att visa hur du använder NSUserDefaults-klassen för att spara och uppdatera programinställningar. I processen kommer vi att bygga en demo app som heter "Kontakt" som lagrar en användarinformation och kontaktinformation.
Med klassen NSUserDefaults kan du spara inställningar och egenskaper relaterade till applikations- eller användardata. Du kan till exempel spara en profilbild som anges av användaren eller ett standardfärgschema för programmet. Objekten sparas i det som kallas iOS-standardvärdet ?. Systemet för iOS-standard är tillgängligt under hela koden i din app, och alla data som sparas i standardinställningarna fortsätter genom applikationssessioner. Det betyder att även om användaren stänger din ansökan eller startar om telefonen, kommer de sparade dataen fortfarande att finnas tillgängliga nästa gång de öppnar appen!
Med NSUserDefaults kan du spara objekt från följande klasstyper:
Om du vill lagra någon annan typ av objekt, till exempel en UIImage, behöver du vanligtvis arkivera den eller lägga den i en instans av NSData, NSNumber eller NSString.
Nu när du vet lite om vad som kan göras med NSUserDefaults, låt oss hoppa till att lära dig hur du använder standardinställningarna med en enkel provapp som lagrar kontaktinformation.
Öppna Xcode och välj? Skapa ett nytt Xcode-projekt ?. Välj en Visa-baserad applikation och klicka på Nästa. Ange ett namn på ditt projekt (jag har kallat min? Kontakt?). Ange din företagsidentifierare och se till att du väljer iPhone för Enhetsfamilj, eftersom vi ska göra en iPhone-app. Om du är klar klickar du på nästa. Välj ett ställe för att spara ditt projekt och klicka sedan på Skapa.
I kontakten? mapp i "Project Navigator"? klicka på ContactViewController.xib.
Dra tre UITextFields från biblioteket till vyn och ordna dem som nedan. Gör detsamma med en UIImageView och två Round Rect-knappar.
Klicka på Den första TextField och typ? Förnamn? i platsfältet. Klicka nu på den andra TextField och typ? Efternamn? i platsfältet. Äntligen klickar du på den tredje och sista TextField och typ? Ålder? i platsfältet. För tangentbordstyp, välj Nummerplatta, eftersom du bara behöver siffror för att ange din ålder.
Ändra texten på den första knappen till? Spara? och texten på den andra knappen till? Välj bild?.
Nu ska vi göra anslutningarna. Xcode 4 har ett nytt enkelt och snabbt sätt att göra det. Välj mellanknappen på redigeraren för att visa? Assistent-redaktören?.
Klicka på förnamnet TextField och CTRL-dra till gränssnittet. En popup kommer att visas, skriv? FirstNameTextField? för namn och klicka på "anslut".
Gör detsamma med Efternamn och ålders Textfält och UllmageView, men ring dem sistNameTextField, ageTextField och contactImageView. För knapparna behöver vi ändra anslutningen till Action istället för Outlet. Så CTRL-dra från Spara-knappen till gränssnittet, men den här gången under de lockiga häftarna. Ändra anslutningen till åtgärd och skriv in? Spara? för namn. Gör detsamma med knappen Välj bild, men den här gången anger du? ChooseImage? för namn. Nu ska koden för ContactViewController.h läsa på följande sätt:
#importera@interface ContactViewController: UIViewController IBOutlet UIImageView * contactImageView; IBOutlet UITextField * firstNameTextField; IBOutlet UITextField * lastNameTextField; IBOutlet UITextField * ageTextField; - (IBAction) spara: (id) avsändare; - (IBAction) chooseImage: (id) avsändare; @slutet
Nu är vi färdiga med gränssnittet. Klicka på Bygg och kör för att se om det går okej. Ange lite text och stäng appen. Om du öppnar appen igen ser du sannolikt att texten du angav fortfarande finns där. Om så är fallet beror det på den inbyggda multitasking-funktionen hos iOS. Om du tar bort appen från multitaskingsfältet och öppnar appen igen ser du att texten du skrev in är borta. I denna handledning använder vi NSUserDefaults för att spara informationen som anges även om du? Verkligen? stäng appen. Detta gör att data kan fortsätta genom flera sessioner.
Växla tillbaka till standardredigeringsläget, så att du har mer utrymme att arbeta inom. Öppna ContactViewController.h och lägg till UIImagePickerControllerDelegate och UINavigationControllerDelegate.
Om du är klar med det, öppna ContactViewController.m och rulla ner till SelectImage-åtgärden och ändra koden för att läsa på följande sätt:
- (IBAction) chooseImage: (id) avsändare UIImagePickerController * picker = [[[UIImagePickerController alloc] init] autorelease]; picker.delegate = self; picker.allowsEditing = JA; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController: pekare animerad: JA];
Först skapar vi en UIImagePickerController, då ställer vi delegaten till sig själv. Därefter aktiverar vi användarredigeringen, ställer sedan källtypen i fotobiblioteket och slutligen visar vi det med en animering till användaren.
Under Välj bildåtgärd delegerar följande bildväljare följande metoder:
#pragma mark - Bildväljare Delegat - (tom) ImagePickerController: (UIImagePickerController *) väljaren didFinishPickingImage: (UIImage *) bildredigeringInfo: (NSDictionary *) redigeringInfo contactImageView.image = image; [picker dismissModalViewControllerAnimated: YES]; - (void) imagePickerControllerDidCancel: (UIImagePickerController *) plockare [picker dismissModalViewControllerAnimated: YES];
I den första metoden ställer vi kontakten ImageView bild till den valda bilden och avfärdar sedan UIImagePickerController. I den andra metoden avvisar vi bara UIImagePickerController.
Du kan spara text med funktionen: setObject: (id) forKey: (NSString *). Nyckeln behöver vara en specifik nyckel för objektet du sparar eftersom du också behöver den nyckeln för att få sparade data. Du kan spara heltal med funktionen: setInteger: (NSInteger) forKey: (NSString *). För att spara bilden måste vi först skapa en förekomst av NSData från den.
Gå till spara åtgärden och ändra koden för att läsa på följande sätt:
- (IBAction) spara: (id) avsändare // Dölj tangentbordet [firstNameTextField resignFirstResponder]; [lastNameTextField resignFirstResponder]; [ageTextField resignFirstResponder]; // Skapa strängar och heltal för att lagra textinfo NSString * firstName = [firstNameTextField text]; NSString * lastName = [lastNameTextField text]; int ålder = [[ageTextField text] integerValue]; // Skapa instanser av NSData Ullmage * contactImage = contactImageView.image; NSData * imageData = UIImageJPEGRepresentation (contactImage, 100); // Spara data NSUserDefaults * default = [NSUserDefaults standardUserDefaults]; [standardvärden setObject: firstName forKey: @ "firstName"]; [standardvärden setObject: LastName forKey: @ "efternamn"]; [standardvärden setInteger: ålder förKey: @ "ålder"]; [standardvärden setObject: imageData forKey: @ "image"]; [standardinställningar] NSLog (@ "Data sparad");
Först gömmer vi tangentbordet. Då skapar vi strängar av texten du skrev in i textfältet förra och efternamn. Vi skapar också ett heltal av den ålder du skrev in. Då lagrar vi bilden från contactImageView som ett NSData-objekt, eftersom vi inte kan spara en UIImage direkt med NSUserDefaults. Då lagrar vi data, vi kallar standardUserDefaults-funktionen för att spara data i den. Till sist synkroniserar vi standarddatabasdatabasen.
Äntligen vill vi få de sparade data. Vi gör detta i viewDidLoad-metoden, eftersom den här metoden heter när applikationen öppnas. Bläddra ner till? ViewDidLoad? metod, kommentera det och ändra koden enligt följande:
- (void) viewDidLoad // Hämta lagrade data innan vyn laddas NSUserDefaults * default = [NSUserDefaults standardUserDefaults]; NSString * firstName = [standardvärden objectForKey: @ "firstName"]; NSString * lastName = [standardvärden objectForKey: @ "efternamn"]; int ålder = [standardvärden integerForKey: @ "age"]; NSString * ageString = [NSString stringWithFormat: @ "% i", ålder]; NSData * imageData = [standardvärden dataForKey: @ "image"]; Ullmage * contactImage = [UIImage imageWithData: imageData]; // Uppdatera UI-elementen med den sparade data firstNameTextField.text = firstName; lastNameTextField.text = lastName; ageTextField.text = ageString; contactImageView.image = contactImage; [super viewDidLoad];
Först kallar vi standardUserDefaults-funktionen igen, så vi kan få sparade data. Vi lägger för- och efternamn i en NSString. Även om åldern är ett heltal skapar vi en sträng för att lagra den, eftersom vi inte direkt kan ställa in TextFields text till ett heltal. Vi lägger bilden i ett NSData-objekt och sedan skapar vi en UIImage från NSData-objektet. Slutligen uppdaterar vi användargränssnittet med de sparade data.
Nu när appen är klar bygg och kör den igen. Ange dina data och välj en bild. Stäng appen från multitaskingsfältet och öppna appen igen. Uppgifterna borde fortfarande finnas där den här gången, och i så fall fungerar vår demo-app!
Tack för att du läste denna handledning om NSUserDefaults! Om du har frågor eller kommentarer om denna handledning, lämna dem i kommentarfältet nedan!
Och om du vill förbättra som en iOS-utvecklare, varför inte kolla in det stora utbudet av IOS-appmallar på Envato Market? Du kan använda dem som en bas för att utveckla dina egna appar, samt inspektera den kvalitetskontrollerade koden och lära av den.
Eller bläddra i apputvecklingstjänsterna på Envato Studio för att få en app skapad för dig från början till slut!
Apputvecklingstjänster på Envato Studio