Это мой первый настоящий проект Cocoa. Я написал функцию, которая принимает NSString как входную, использует NSTask для запуска команды ADB и возвращает вывод терминала в NSString. Код строит отлично, но когда я нажимаю кнопку для запуска этой функции, приложение зависает. Когда я принудительно закрываю, я вижу Thread 1: signal SIGTERM
на линии data = [file readDataToEndOfFile];
.SIGTERM при возвращении NSString
Функция
NSString* runADBCommand(NSString *cmd)
{
[[NSTask launchedTaskWithLaunchPath:adbPath
arguments:[NSArray arrayWithObjects: cmd, nil]]waitUntilExit];
NSTask *adbDevices = [[NSTask alloc] init];
adbDevices.launchPath = adbPath;
NSString* devices = @"devices";
adbDevices.arguments = @[devices];
NSPipe *pipe;
pipe = [NSPipe pipe];
[adbDevices setStandardOutput:pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
NSData *data;
data = [file readDataToEndOfFile];
NSString *adbComOutput;
adbComOutput = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"\n\n%@", adbComOutput);
return adbComOutput;
}
Вызов
- (void) getVersion:(id)sender
{
runADBCommand(@"shell cat /system/build.prop | grep incremental");
}
Я искал ссылки в Интернете, но я не уверен, что искать. Любая помощь приветствуется!
Большое спасибо за это удивительное объяснение! Я даже не понял, что я забыл заявление о запуске. Я положил '[adbDevices launch];' прямо после 'file = [pipe fileHandleForReading];' и он отлично работает! – Thomas