Вход в файл на iPhone - PullRequest
       39

Вход в файл на iPhone

18 голосов
/ 14 октября 2008

Каков наилучший способ записи операторов журнала в файл или базу данных в приложении iPhone?

В идеале вывод NSLog () может быть перенаправлен в файл с помощью freopen (), но я видел несколько отчетов о том, что он не работает. У кого-нибудь уже есть это или есть идеи, как это лучше всего сделать?

Спасибо!

Ответы [ 5 ]

32 голосов
/ 15 октября 2008

Если вы хотите использовать Какао, 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];
18 голосов
/ 14 октября 2008

Я успешно использовал freopen (...) на телефоне, чтобы перенаправить вывод в мой собственный файл.

14 голосов
/ 20 января 2010

Этот код прекрасно работает для меня ..

#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, по-прежнему работает отлично.

11 голосов
/ 26 января 2009

У меня работает этот код:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
#if TARGET_IPHONE_SIMULATOR == 0
    freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr);
#endif
}
3 голосов
/ 28 декабря 2011

Рассмотрите возможность использования Cocoa Lumberjack . Это легкая, но гибкая утилита для замены функциональности NSLog. На мой взгляд, он находится в том же классе, что и Log4J, что позволяет создавать собственные приложения и тому подобное. Например, он имеет регистратор SQLite.

...