Domanda

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 rapporti che non funziona. Qualcuno lo ha già fatto o ha qualche idea su come farlo nel modo migliore?

Grazie!

È stato utile?

Soluzione

Ho usato con successo freopen (...) sul telefono per reindirizzare l'output sul mio file.

Altri suggerimenti

Se si desidera utilizzare Cocoa, NSString e NSData dispongono di metodi per leggere / scrivere su file e NSFileManager fornisce 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 alla grande 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

È quindi possibile ottenere 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/# più-85

Nota che l'uso di freopen interromperà il funzionamento della CONSOLE IN XCODE .. tuttavia, per qualche motivo la console che puoi visualizzare nell'organizzatore 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
}

Valuta l'utilizzo di Cocoa Lumberjack . È un'utilità leggera ma flessibile per sostituire la funzionalità NSLog. A mio avviso è nella stessa classe di Log4J, consentendo appendici personalizzate e simili. Ha un logger SQLite, ad esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top