【发布时间】:2013-09-16 15:19:50
【问题描述】:
我使用 NSTask 运行 shell 命令并通过 NSPipe 输出数据。一开始我用下面的方法读取输出数据,没有任何问题。
- (void)outputAvailable:(NSNotification *)aNotification {
NSString *newOutput;
NSMutableData *allData = [[NSMutableData alloc] init];
NSData *taskData = nil;
if((taskData = [readHandle availableData]) && [taskData length])
newOutput = [[NSString alloc] initWithData:allData encoding:NSASCIIStringEncoding];
NSLog(@"%@", newOutput);
[readHandle readInBackgroundAndNotify];
}
这个方法的问题是它只输出4096字节的数据。所以我使用while循环来获取更多数据,修改方法如下:
- (void)outputAvailable:(NSNotification *)aNotification {
NSString *newOutput;
NSMutableData *allData; //Added.
NSData *taskData = nil;
while ((taskData = [readHandle availableData]) && [taskData length]) {
[allData appendData:taskData];
}
newOutput = [[NSString alloc] initWithData:allData encoding:NSASCIIStringEncoding];
NSLog(@"%@", newOutput);
[readHandle readInBackgroundAndNotify];
}
然后出现问题:程序阻塞在while循环中,无法执行以下语句。我确保allData 是我想要的,但是在附加最后一个数据块之后,它被阻塞了。
你能给我一些解决方案吗?谢谢。
【问题讨论】:
标签: objective-c blocking nstask nspipe