我正在阅读NSTask的stdout,如下所示:
NSPipe *outputpipe = [[NSPipe alloc] init];
NSFileHandle *output = [outputpipe fileHandleForReading];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedOutputFromAlgo:) name:NSFileHandleReadCompletionNotification object:output];
NSTask* task = [[NSTask alloc] init];
[task setLaunchPath:[NSString stringWithFormat:@"%@algo/Algo", kVinylRoot]];
[task setArguments:[NSArray arrayWithObject:plist]];
[task setStandardOutput:outputpipe];
[task setCurrentDirectoryPath:[NSString stringWithFormat:@"%@algo", kVinylRoot]];
[task launch];
[output readInBackgroundAndNotify];
[task waitUntilExit];
...
-(void)receivedOutputFromAlgo:(NSNotification*)notification {
[[notification object] readInBackgroundAndNotify];
NSData* dataOutput = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem];
NSString* dataString = [[NSString alloc] initWithData:dataOutput encoding:NSStringEncodingConversionAllowLossy];
//Do stuff
}
如果我从Xcode运行它,这可以正常工作。我在控制台中看到了我的任务的标准输出,并且多次触发了receiveOutputFromAlgo。但是,如果我存档应用程序并通过双击.app包运行它或从终端运行它不起作用。如果我从那里运行它,我仍然可以在console.app或终端中看到任务标准输出。
此时不考虑stdout吗?为什么这不起作用?
编辑:我刚试过关闭发布中的优化,但也没有用。
答案 0 :(得分:0)
你需要处理setStandardError,如下所示:
[task setStandardError:outputpipe];