Video: Sådan bruger du dropbox 2024
I IOS apps bruges filer som midler til lagring og genoprettelse af tilstanden for et aktivt spil. Hvis du har lavet nogen programmering på et hvilket som helst sprog (C, C ++, Java, C #, navngiver du det), har du brugt filer til at læse data fra og skrive data til. Mål-C giver dig mulighed for også at arbejde med filer. Filer i iOS er organiseret i mapper.
Hver app får sin egen mappe, hvor appen befinder sig, og dens data kan gemmes. Denne mappe er kendt som appens sandkasse.
En app er forbudt at få adgang til eller oprette filer uden for sin sandkasse. Når en app skal arbejde med brugerens kontakter eller musik, skal systemet (og gør) tillade de filrelaterede operationer, der skal læses fra eller ændre disse datalager, der er uden for appens sandkasse.
Denne sandkassekatalog er organiseret i et sæt underkataloger. Apple specificerer, hvordan hver af disse underkataloger skal bruges, som følger:
-
<< app navn >>. App-mappen er hvor appens eksekverbare og alle filer i bunden er hjemmehørende (f.eks. X og O-billederne til Tic-Tac-Toe). Dokumenter-mappen indeholder data, som din app ikke kan genskabe, f.eks. Brugergenererede dokumenter eller indhold. Dette er den mappe, hvor Tic-Tac-Toe app gemmer spil, holder sine SQLite filer, og så videre. iTunes sikkerhedskopierer denne mappe, så når du tilslutter enheden til din Mac, gemmes dataene her.
-
Indbakken i mappen Dokumenter har særlig betydning. Denne mappe gemmer filer, som
andre -
apps beder din app om at åbne. For eksempel placerer Mail-programmet e-mail-vedhæftede filer, der er knyttet til din app i denne mappe. Din app kan læse og slette filer i denne mappe, men kan ikke oprette nye filer eller skrive til eksisterende filer. Bibliotekskataloget bruges til filer, der ikke er brugerdatafiler, men skal sikkerhedskopieres. Med undtagelse af en underkatalog med navnet Caches (som er specifikt til data, vil appen midlertidigt gemme for hurtigere adgang), bliver filerne her sikkerhedskopieret af iTunes. Tmp-underkatalogen gemmer midlertidige data, der ikke behøver at fortsætte mellem app-kørsler. Din app skal fjerne filer fra denne mappe, når de ikke længere er nødvendige. Systemet kan også rense langvarige filer fra denne mappe, når din app ikke kører eller diskpladsen er lav. Indholdet af denne mappe er
-
ikke
-
sikkerhedskopieret. Se nu et hurtigt eksempel i Tic-Tac-Toe, der viser, hvordan man skriver til og læser fra filer. I dette eksempel skal du bruge en fil til at gemme og gendanne tilstanden af et spil. Når en bruger rører Gem spil, gemmes den aktuelle tilstand af spillet i en fil med navnet SavedGames. data i mappen Dokumenter i appens sandkasse (stien til denne fil blev indstillet ved hjælp af #define som den konstante TTTGAMESESSIONSAVEDFILEPATH i filen TTTGameSessionViewController. h).
Hvis brugeren afslutter uden at afslutte spillet, kan hun vende tilbage til skærmens spilskærm og vende tilbage til det gemte spil ved at vælge Gendan spil.
Nu for nogle kode. Følgende kode viser saveGame:
- (IBAction) saveGame: (id) afsender {NSDictionary * savedGameDictionary = [activeGame toDictionary]; NSError * fejl; NSData * jsonData = [NSJSONSerialization dataWithJSONObject: savedGameDictionary muligheder: NSJSONWritingPrettyPrinted error: & error]; NSString * savedGameString = [[NSString allokere] initWithData: jsonData-kodning: NSUTF8StringEncoding]; NSString * savedGamesFilePath = [NSHomeDirectory () stringByAppendingPathComponent: @TTTGAMESESSIONSAVEDFILEPATH]; [savedGameString writeToFile: savedGamesFilePath atomisk: JA kodning: NSUTF8StringEncoding error: NULL];}
At skrive til en fil er let. Du bygger bare filnavnet på filen ved hjælp af metoden stringByAppendingPathComponent på et objekt, der repræsenterer appens hjemmemappe (som du får ved at kalde funktionen NSHomeDirectory). Derefter gør [savedGameString writeToFile: savedGamesFilePath …] den egentlige skrivning.
Læsning fra en fil er ligeledes ligetil. Her er koden til restoreGame:
- (IBAction) restoreGame: (id) afsender {NSString * savedGamesFilePath = [NSHomeDirectory () stringByAppendingPathComponent: @TTTGAMESESSIONSAVEDFILEPATH]; NSString * savedGameString = [NSString stringWithContentsOfFile: savedGamesFilePath-kodning: NSUTF8StringEncoding error: NULL]; NSError * restoreError = nil; NSMutableDictionary * savedDictionary = [NSJSONSerialization JSONObjectWithData: [savedGameString dataUsingEncoding: NSUTF8StringEncoding] indstillinger: 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 set, hvordan en sti til filen oprettes ved hjælp af NSHomeDirectory-funktionen for at få hjemmekatalogobjektet, og derefter bruge dette objektets metode strengByAppendingPathComponent til at oprette strengen. Derefter læser du hele filen i en streng ved hjælp af [NSString stringWithContentsOfFile: savedGamesFilePath …], og så er du fri til at behandle strengen efter behov.