У меня есть следующий код Obj-C и его вывод журнала. Может ли кто-нибудь сказать мне, почему я не получаю никакого результата от NSFileHandle?echo не работает с NSTask и readInBackgroundAndNotify
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self performSelectorInBackground:@selector(startTask:) withObject:nil];
}
- (void) startTask: (id) sender
{
NSPipe *pipe = [[NSPipe alloc] init];
NSFileHandle *fh = pipe.fileHandleForReading;
[fh readInBackgroundAndNotify];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(output:) name:NSFileHandleReadCompletionNotification object:fh];
NSTask *echoTask = [[NSTask alloc] init];
echoTask.standardOutput = pipe;
echoTask.standardError = [[NSPipe alloc] init];
echoTask.launchPath = @"/bin/echo";
echoTask.arguments = @[@"hello world!"];
NSLog(@"launching...");
[echoTask launch];
[echoTask waitUntilExit];
NSLog(@"finished.");
}
- (void) output:(NSNotification *)notification
{
NSFileHandle *fh = notification.object;
NSLog(@"fh: %@", fh);
NSString *output = [[NSString alloc] initWithData:[fh readDataToEndOfFile] encoding:NSUTF8StringEncoding];
NSLog(@"output: '%@'", output);
}
@end
журнала:
2014-12-16 10:19:58.154 SubProcess2[14893:704393] launching...
2014-12-16 10:19:58.165 SubProcess2[14893:704393] fh: <NSConcreteFileHandle: 0x6080000e9e80>
2014-12-16 10:19:58.165 SubProcess2[14893:704393] output: ''
2014-12-16 10:19:58.166 SubProcess2[14893:704393] finished.
Если я это делать синхронно или с использованием подхода в https://stackoverflow.com/a/16274541/1015200 я мог заставить его работать. Произошли какие-либо другие методы и варианты (например, запуск задачи без выполнения функцииSelectorInBackground). Я действительно хочу посмотреть, смогу ли я заставить его работать с помощью уведомления. Так что если я могу получить любую помощь, это будет здорово.
Работал отлично, спасибо! –