ci sono tre tipi di percorsi scrivibili da considerare - la prima è Documenti, dove memorizzare le cose che si desidera conservare e rendere disponibile per l'utente attraverso iTunes (a partire da 3,2):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
In secondo luogo, e molto simile alla directory Documenti, c'è la cartella Libreria, dove si archiviano i file di configurazione e i database scrivibili che si desidera mantenere, ma non si vuole che l'utente sia in grado di fare confusione con iTunes:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
Si noti che anche se l'utente non è possibile visualizzare i file in iTunes utilizzando un dispositivo più vecchio di 3,2 (l'iPad), la costante NSLibraryDirectory è disponibile da iPhoneOS 2.0, e quindi può essere utilizzata per il targeting di build 3.0 (o anche prima se lo si sta ancora facendo). Inoltre, l'utente non sarà in grado di vedere nulla a meno che non si contrassegna un'app che consenta agli utenti di modificare i documenti, quindi se si sta utilizzando Documenti oggi si ha la certezza di cambiare posizione durante l'aggiornamento per il supporto dei documenti dell'utente.
scorso c'è una directory di cache, dove si può mettere le immagini che non si cura esiste per il lungo termine o meno (il telefono potrebbe cancellarli ad un certo punto):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir == NO) {
[[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}
Si noti che è devo effettivamente creare la directory Caches lì, quindi quando scrivi devi controllare e creare ogni volta! Una specie di dolore, ma è così.
Poi, quando si dispone di un percorso scrivibile, basta aggiungere un nome di file su di esso in questo modo:
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"SomeDirectory/SomeFile.txt"];
o
NSString *filePath = [cachePath stringByAppendingPathComponent:@"SomeTmpFile.png"];
utilizzare quel percorso per la lettura o la scrittura.
Si noti che è possibile creare sottodirectory in uno di questi percorsi scrivibili, che utilizza una delle stringhe di esempio sopra riportate (supponendo che ne sia stata creata una).
Se si sta tentando di scrivere un'immagine nella libreria di foto, non è possibile utilizzare le chiamate del sistema file per farlo - invece, è necessario avere una memoria UII in memoria e utilizzare la chiamata di funzione UIImageWriteToSavedPhotosAlbum()
definita da UIKit. Non hai il controllo sul formato di destinazione o sui livelli di compressione e non puoi allegare EXIF in questo modo.
Non costruire il percorso Ti memorizza in cache. Utilizzare la stessa funzione 'NSSearchPathForDirectoriesInDomain()', ma invece di usare 'NSDocumentDirectory', usare' NSCachesDirectory'. –
Risposta modificata per usare 'NSCachesDirectory' –
Grazie, buono a sapersi. –