NSTask
имеет метод setStandardOutput
, который принимает либо NSFileHandle
, либо NSPipe
объект. Поэтому, если вы создадите объект NSPipe
и установите его как NSTask
standardOutput
, вы можете использовать NSPipe
fileHandleForReading
, чтобы получить NSFileHandle
, из которого, в свою очередь, вы сможете 1011 * или readDataOfLength:
вы хотите. Так что-то вроде этого (код не проверен):
- (void)setupTask {
// assume it's an ivar
standardOutputPipe = [[NSPipe alloc] init];
[myTask setStandardOutput:standardOutputPipe];
// other setup code goes below
}
// reading data to NSTextField
- (void)updateOutputField {
NSFileHandle *readingFileHandle = [standardOutputPipe fileHandleForReading];
NSData *newData;
while ((newData = [readingFileHandle availableData])) {
NSString *newString = [[[NSString alloc] initWithData:newData encoding: NSASCIIStringEncoding] autorelease];
NSString *wholeString = [[myTextField stringValue] stringByAppendingString:newString];
[myTextField setStringValue:wholeString];
}
[standardOutputPipe release];
standardOutputPipe = nil;
}