Video: Helt enkelt: Slik laster du opp bilder til Min Sky | Telenor Norge 2024
I IOS-apper brukes filer til å lagre og gjenopprette tilstanden til et aktivt spill. Hvis du har gjort noen programmering på et hvilket som helst språk (C, C ++, Java, C #, du heter det), har du brukt filer til å lese data fra og skrive data til. Mål-C lar deg også arbeide med filer. Filer i iOS er organisert i kataloger.
Hver app får sin egen katalog hvor appen ligger og dataene kan lagres. Denne katalogen er kjent som appens sandkasse.
En app er forbudt fra å få tilgang til eller opprette filer utenfor sin sandkasse. Når en app trenger å jobbe med brukerens kontakter eller musikk, må systemet (og gjør) tillate filrelaterte operasjoner som trengs for å lese fra eller modifisere disse datalagerene, som ligger utenfor programmets sandkasse.
Denne sandbokkatalogen er organisert i et sett med underkataloger. Apple angir hvordan hver av disse underkatalogene skal brukes, som følger:
-
<< appnavn >>. App-katalogen er hvor appens kjørbare og alle filene i bunten er (for eksempel X og O-bilder for Tic-Tac-Toe). Dokumenter-katalogen inneholder data som appen din ikke kan gjenopprette, for eksempel brukergenererte dokumenter eller innhold. Dette er katalogen der Tic-Tac-Toe app lagrer spill, holder sine SQLite-filer, og så videre. iTunes sikkerhetskopierer denne katalogen, så når du kobler enheten til din Mac, blir dataene her lagret.
-
Innbokkatalogen i Dokumenter-katalogen har spesiell betydning. Denne katalogen lagrer filer som
andre -
apper ber appen din å åpne. For eksempel plasserer postprogrammet e-postvedlegg knyttet til appen din i denne katalogen. Appen din kan lese og slette filer i denne katalogen, men kan ikke lage nye filer eller skrive til eksisterende filer. Bibliotekskatalogen brukes til filer som ikke er brukerdatafiler, men må sikkerhetskopieres. Med unntak av en underkatalog kalt Caches (som er spesifikt for data, vil appen midlertidig lagre for raskere tilgang), blir filene her sikkerhetskopiert av iTunes. Tmp-underkatalogen lagrer midlertidige data som ikke trenger å fortsette mellom app-kjøringer. Appen din bør fjerne filer fra denne katalogen når de ikke lenger er nødvendig. Systemet kan også rense langvarige filer fra denne katalogen når appen ikke kjører eller diskplassen er lav. Innholdet i denne katalogen er
-
ikke
-
sikkerhetskopiert. Se nå et raskt eksempel i Tic-Tac-Toe som viser hvordan du skriver til og leser fra filer. I dette eksemplet bruker du en fil for å lagre og gjenopprette tilstanden til et spill. Når en bruker berører Lagre spill, lagres den nåværende tilstanden til spillet i en fil med navnet SavedGames. data i mappen Dokumenter i appens sandkasse (banen til denne filen ble satt med #define som den konstante TTTGAMESESSIONSAVEDFILEPATH i filen TTTGameSessionViewController. h).
Hvis brukeren avslutter uten å fullføre spillet, kan hun gå tilbake til skjermbildet og gå tilbake til det lagrede spillet ved å velge Gjenopprett spill.
Nå for noen kode. Følgende kode viser saveGame:
- (IBAction) saveGame: (id) sender {NSDictionary * savedGameDictionary = [activeGame toDictionary]; NSError * feil; NSData * jsonData = [NSJSONSerialization dataWithJSONObject: savedGameDictionary alternativer: NSJSONWritingPrettyPrinted error: & error]; NSString * savedGameString = [[NSString alloker] initWithData: jsonData-koding: NSUTF8StringEncoding]; NSString * savedGamesFilePath = [NSHomeDirectory () stringByAppendingPathComponent: @TTTGAMESESSIONSAVEDFILEPATH]; [savedGameString writeToFile: savedGamesFilePath atomisk: JA-koding: NSUTF8StringEncoding error: NULL];}
Det er enkelt å skrive til en fil. Du bygger bare banenavnet til filen ved hjelp av metoden stringByAppendingPathComponent på et objekt som representerer appens hjemmekatalog (som du får ved å ringe funksjonen NSHomeDirectory). Deretter gjør [savedGameString writeToFile: savedGamesFilePath …] den faktiske skrivingen.
Lesing fra en fil er også grei. Her er koden for restoreGame:
- (IBAction) restoreGame: (id) avsender {NSString * savedGamesFilePath = [NSHomeDirectory () stringByAppendingPathComponent: @TTTGAMESESSIONSAVEDFILEPATH]; NSString * savedGameString = [NSString stringWithContentsOfFile: savedGamesFilePath-koding: NSUTF8StringEncoding error: NULL]; NSError * restoreError = nil; NSMutableDictionary * savedDictionary = [NSJSONSerialization JSONObjectWithData: [savedGameString dataUsingEncoding: NSUTF8StringEncoding] alternativer: NSJSONReadingMutableContainers error: & restoreError]; activeGame = [[TTTGame alloc] initFromDictionary: savedDictionary]; TTTGameGrid * gameGrid = [activeGame getGameGrid]; hvis (! [activeGame isActive]) [boardView disableInput]; [boardView setGrid: gameGrid]; [gameView redraw];}
Du har allerede sett hvordan en sti til filen er opprettet ved hjelp av NSHomeDirectory-funksjonen for å hente hjemmekatalogobjektet, og deretter bruke dette objektets metode strengByAppendingPathComponent for å lage strengen. Deretter leser du hele filen inn i en streng ved hjelp av [NSString stringWithContentsOfFile: savedGamesFilePath …], og du kan deretter behandle strengen etter behov.