Registrazione su un file su iPhone

Quale sarebbe il modo migliore per scrivere istruzioni di registro in un file o database in un’applicazione iPhone?

Idealmente, l’output di NSLog () potrebbe essere reindirizzato a un file usando freopen (), ma ho visto diversi report che non funziona. Qualcuno ha già questo o ha qualche idea su come questo potrebbe essere fatto meglio?

Grazie!

Ho usato con successo freopen (…) sul telefono per redirect l’output sul mio file.

Se si desidera utilizzare Cocoa, NSString e NSData dispongono di metodi per la lettura / scrittura su file e NSFileManager fornisce le operazioni sui file. Ecco un esempio (dovrebbe funzionare su iPhone):

 NSData *dataToWrite = [[NSString stringWithString:@"String to write"] dataUsingEncoding:NSUTF8StringEncoding]; NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *path = [docsDirectory stringByAppendingPathComponent:@"fileName.txt"]; // Write the file [dataToWrite writeToFile:path atomically:YES]; // Read the file NSString *stringFromFile = [[NSString alloc] initWithContentsOfFile:path]; // Check if file exists NSFileManager *fileManager = [NSFileManager defaultManager]; [fileManager fileExistsAtPath:path]; // Returns a BOOL // Remove the file [fileManager removeItemAtPath:path error:NULL]; // Cleanup [stringFromFile release]; [fileManager release]; 

Questo codice funziona benissimo per me ..

 #if TARGET_IPHONE_SIMULATOR == 0 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"]; freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr); #endif 

Puoi quindi estrarre il file di registro dall’iPhone utilizzando il metodo descritto qui http://blog.coriolis.ch/2009/01/09/redirect-nslog-to-a-file-on-the-iphone/#more- 85

Si noti che l’uso di freopen interromperà la CONSOLE IN XCODE funzionante. Tuttavia, per qualche motivo la console che è ansible visualizzare nell’organizer di xcode funziona ancora alla grande.

Questo codice funziona per me:

 - (void)applicationDidFinishLaunching:(UIApplication *)application { #if TARGET_IPHONE_SIMULATOR == 0 freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr); #endif } 

Prendi in considerazione l’utilizzo di Lumberjack di cocoa . È un’utilità leggera ma flessibile per sostituire la funzionalità NSLog. A mio parere è nella stessa class di Log4J, consentendo appendici personalizzati e simili. Ad esempio, ha un logger SQLite.