当前位置:  开发笔记 > 编程语言 > 正文

记录到iPhone上的文件

如何解决《记录到iPhone上的文件》经验,为你挑选了4个好方法。

将日志语句写入iPhone应用程序中的文件或数据库的最佳方法是什么?

理想情况下,NSLog()输出可以使用freopen()重定向到文件,但我看到几个报告它不起作用.有没有人已经这样做或有任何想法如何最好地做到这一点?

谢谢!



1> Martin Gordo..:

如果你想使用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];



2> Ben Gottlieb..:

我已成功在手机上使用freopen(...)将输出重定向到我自己的文件.


我使用了freopen([newFileName UTF8String],"w +",stderr),它将所有控制台输出重定向到logFileName.
您可以使用`isatty()`来检查STDERR_FILENO是否附加到tty,并选择不重定向到文件.当你通过Xcode运行应用程序时(或者当它连接到调试器时,我猜).这可能是您需要控制台输出的唯一时间.

3> Ben Clayton..:

这段代码对我很有用..

#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的管理器中查看的控制台仍然可以正常工作.



4> nst..:

这段代码适合我:

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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有