2011-02-11 25 views
6

Como práctica, estoy tratando de escribir una aplicación similar a la aplicación de notas incorporada.
Pero no puedo encontrar la forma de guardar el archivo y mostrarlo en un UITableView.
En este momento, tengo un UITextView que el usuario puede escribir. También tengo un botón de guardar.
Cuando el usuario toca el botón Guardar, quiero guardarlo y luego mostrarlo en una vista de tabla.
Estoy muy perdido así que si conoces algún tutorial relevante, etc. sería muy apreciado.Escribir y leer archivos de texto en el iPhone

+1

Una respuesta que es probable que no quiere oír es "No usar archivos de texto ". Puede echar un vistazo a algunas estrategias integradas de serialización (plists). – hanno

+1

@hanno - También agregaría que incluso mejor que los plists, use Core Data. Es rápido, eficiente y, lo que es más importante, * escalable *. –

Respuesta

23

Según lo observado por los comentaristas en el mundo real, definitivamente querrá ver los datos centrales o alguna otra estrategia de persistencia de datos. Si usted está empeñado en perseguir esto como una experiencia de aprendizaje, algo como esto debería resolver su problema:

- (void)writeStringToFile:(NSString*)aString { 

    // Build the path, and create if needed. 
    NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString* fileName = @"myTextFile.txt"; 
    NSString* fileAtPath = [filePath stringByAppendingPathComponent:fileName]; 

    if (![[NSFileManager defaultManager] fileExistsAtPath:fileAtPath]) { 
     [[NSFileManager defaultManager] createFileAtPath:fileAtPath contents:nil attributes:nil]; 
    } 

    // The main act... 
    [[aString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO]; 
} 

- (NSString*)readStringFromFile { 

    // Build the path... 
    NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString* fileName = @"myTextFile.txt"; 
    NSString* fileAtPath = [filePath stringByAppendingPathComponent:fileName]; 

    // The main act... 
    return [[[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fileAtPath] encoding:NSUTF8StringEncoding] autorelease]; 
} 
+0

¿Es mejor que usar [NSString writeToFile] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html)? –

+0

hola. Obtuve un error y fallo en esta línea: [[aString dataUsingEncoding: NSUTF8StringEncoding] writeToFile: fileAtPath atómicamente: NO]; – kemdo

1

La forma más fácil de guardar mensajes de texto está usando NSUserDefaults.

[[NSUserDefaults standardUserDefaults] setObject:theText forKey:@"SavedTextKey"]; 

o, si usted quiere tener el nombre de usuario cada "archivo" o ser capaz de tener varios archivos

NSMutableDictionary *saveTextDict = [[[[NSUserDefaults standardUserDefaults] objectForKey:@"SavedTextKey"] mutableCopy] autorelease]; 
if (saveTextDict == nil) { 
    saveTextDict = [NSMutableDictionary dictionary]; 
} 

[saveTextDict setObject:theText forKey:fileName]; 
[[NSUserDefaults standardUserDefaults] setObject:saveTextDict forKey:@SavedTextKey"]; 
+0

Si todo lo que se necesita es un ahorro de cadenas rápido y sucio, entonces opte por el enfoque plist. Pero si vas a aumentar de escala, trata de resistir la tentación que te ofrece su facilidad de uso. –

Cuestiones relacionadas