Какао, а не iOS.У меня есть массив элементов, который поддерживает UITableview.Я прохожу массив и выполняю ряд задач, в частности, я вызываю внешний скрипт, исполняемый с помощью NSTask.Пока задача выполняется, я хочу обновить столбец «Состояние» в UITableView.
Я обновляю значение массива, связанного со столбцом, и затем вызываю [_TableView reloadData], но в пользовательском интерфейсе не происходит никаких изменений, пока не будет выполнена вся обработка.
for (int ix = 0; ix < [_sceneList count]; ix++) {
// update status in array backing the TableView
[[_sceneList objectAtIndex:ix] setRenderStatus:@"Rendering"];
[_tableView reloadData];
// execute command via shell script
[self runScript:@"run_script.bash":appPath:outputFormat:showGUI:threadCnt:resolution:renderFile:outputFile];
[[_sceneList objectAtIndex:ix] setRenderStatus:@"Complete"];
[_tableView reloadData];
}
код для run_script:
-(void) runScript:(NSString*)scriptName:(NSString*)appPath:(NSString*)outputFormat:(NSString*)showGUI:(NSString*)threadCnt:(NSString*)resolution:(NSString*)renderFile:(NSString*)outputFile;
{
NSTask *task;
task = [[NSTask alloc] init];
NSArray *arguments;
NSString* newpath = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath] , scriptName];
[task setLaunchPath: newpath];
arguments = [NSArray arrayWithObjects:appPath, showGUI, renderFile, outputFile, outputFormat, threadCnt, resolution ,nil];
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
[task setStandardInput:[NSPipe pipe]];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"script returned:\n%@", string);
}
Есть идеи, почему пользовательский интерфейс не обновляется?
Есть ли какой-нибудь метод "tableview: updateRow", который мне следует использовать?
_mike