将日志语句写入iPhone应用程序中的文件或数据库的最佳方法是什么?
理想情况下,NSLog()输出可以使用freopen()重定向到文件,但我看到几个报告它不起作用.有没有人已经这样做或有任何想法如何最好地做到这一点?
谢谢!
如果你想使用Cocoa,NSString和NSData有读/写文件的方法,NSFileManager给你文件操作.这是一个例子(应该适用于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];
我已成功在手机上使用freopen(...)将输出重定向到我自己的文件.
这段代码对我很有用..
#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
然后,您可以使用此处概述的方法从iphone获取日志文件http://blog.coriolis.ch/2009/01/09/redirect-nslog-to-a-file-on-the-iphone/#more- 85
请注意,使用freopen将停止XCODE中的控制台工作..但是,由于某种原因,您可以在xcode的管理器中查看的控制台仍然可以正常工作.
这段代码适合我:
- (void)applicationDidFinishLaunching:(UIApplication *)application { #if TARGET_IPHONE_SIMULATOR == 0 freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr); #endif }