Я использую:
#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
.. перенаправить NSLog в файл, который работает отлично случайно.
Я хочу сделать вход для регистрации чего-то, что пользователь моего приложения может включить и выключить.. кто-либо знает, как я иду о перенаправлении NSLog/stderr назад к консоли?
Спасибо!
Это явно не отвечает на ваш вопрос, но если все, что вам нужно для перенаправления, это вывод NSLog, то я бы рассмотрел с помощью обертки вокруг NSLog () и решить, следует ли отправлять в файл или регулярный NSLOG / STDERR на основе Флаг, который вы держите вокруг, что пользователь может управлять.
(Это похоже на удивительный дизайн для меня, чтобы принципиально перенаправить поток STDERR для достижения этого - и с оберткой над уровнем NSLog вы можете так же легко выбрать для отправки вывода на обоих местах, если вы когда-нибудь хотели. )
Это взято из http://www.atomicbird.com/blog/2007/07/code-quickie-redirect-nslog
// Save stderr so it can be restored.
int stderrSave = dup(STDERR_FILENO);
// Send stderr to our file
FILE *newStderr = freopen("/tmp/redirect.log", "a", stderr);
NSLog(@"This goes to the file");
// Flush before restoring stderr
fflush(stderr);
// Now restore stderr, so new output goes to console.
dup2(stderrSave, STDERR_FILENO);
close(stderrSave);
// This NSLog will go to the console.
NSLog(@"This goes to the console");