Вопрос

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

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

Спасибо!

Это было полезно?

Решение

Я успешно использовал 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];

Этот код отлично работает для меня..

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

Этот код работает у меня:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top