Я работаю над созданием очень простой IDE для C / C ++ со всем шебангом XCode-Interface Builder-Cocoa-Objective-C. Окно документа разделено с помощью NSSplitView на текстовый редактор и другой подкласс NSTextView, который я хочу использовать как терминал для запуска скомпилированной программы. Я могу успешно перенести свой стандартный вывод в этот NSTextView с помощью задачи. pipe-filehandle system, но проблема в том, что это, очевидно, должно происходить построчно для программ, которые требуют ввода в scanf () или что-то еще, и сейчас это текстовое представление будет обновляться только после завершения программы. Я еще не настроил стандартный ввод, откуда бы он ни пришел, поэтому в данный момент я печатаю в консоли отладчика, но, например, если моя программа похожа на
int input;
printf("Enter some input: ");
scanf("%d", &input);
printf("\nSome more output blah blah blah.\n");
тогда я ничего не получу, пока не введу свой ввод в консоль, после чего текстовое представление получит все содержимое дескриптора файла, которое будет оба оператора printf один за другим. Не очень полезно на всех. Итак, как мне обновить текстовое представление в режиме реального времени? Или есть какой-то чудесно простой способ заставить представление вести себя так же, как терминальная консоль? Не рассчитывая на это. Для справки, вот мой маленький фрагмент кода после того, как я настроил задачу, канал и дескриптор файла. outview
- это объект IBOutlet, представляющий рассматриваемое текстовое представление вывода. Спасибо!
[programTask launch];
NSData *data;
data = [programFileHandle availableData];
NSString *fileout;
fileout = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSRange endRange;
endRange.location = [[outview textStorage] length];
endRange.length = 0;
[outview replaceCharactersInRange:endRange withString:fileout];