La ejecución asincrónica del comando de shell no funciona correctamente

Entonces, este es mi código:

- (void)runCmd:(NSString *)cmd withArgs:(NSArray *)args
{
    NSLog(@"\nRunning ::\n\tCmd : %@\n\tArgs : %@",cmd, args);
    [theSpinner start];
    if (task)
    {
        [task interrupt];

    }
    else
    {
        task = [[NSTask alloc] init];
        [task setLaunchPath:cmd];

        [task setArguments:args];

        [pipe release];

        pipe = [[NSPipe alloc] init];
        [task setStandardOutput:pipe];

        NSFileHandle* fh = [pipe fileHandleForReading];

        NSNotificationCenter* nc;

        nc = [NSNotificationCenter defaultCenter];
        [nc removeObserver:self];
        [nc addObserver:self 
               selector:@selector(dataReady:) 
                   name:NSFileHandleReadCompletionNotification 
                 object:fh];
        [nc addObserver:self selector:@selector(dataAvailable:) name:NSFileHandleDataAvailableNotification object:fh];
        [nc addObserver:self 
               selector:@selector(taskTerminated:) 
                   name:NSTaskDidTerminateNotification 
                 object:task];

        [task launch];
        [fh readInBackgroundAndNotify];
    }
}

- (void)dataAvailable:(NSNotification*)n
{
    NSLog(@"Data Available : %@",n);
}

- (void)dataReady:(NSNotification*)n
{
    NSData* d;

    d = [[n userInfo] valueForKey:NSFileHandleNotificationDataItem];

    NSLog(@"Data Ready : %@",n);

    if ([d length])
    {
        NSLog(@"Data Ready : %@",[[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding]);
    }
}

- (void) taskTerminated:(NSNotification*)note
{
    NSLog(@"Task Terminated : %@",note);
    [task release];
    task = nil;
    [theSpinner stop];

    NSAlert *alert = [[[NSAlert alloc] init] autorelease];
    [alert setMessageText:[NSString stringWithFormat:@"Command finished"]];

    [alert runModal];
}

He intentado ejecutar un comando (por ejemplo, el intérprete de php en/usr/bin/php) con argumentos (por ejemplo, el archivo que interpretará phptest.php).

La cosa es

El script funciona bien PERO, estoy recibiendo unData Ready yTask Terminated notificación ANTES de que logré obtener toda la salida. (Quiero decir, eldataReady:a función @ obtiene solo la primera parte de la
output y el resto no se encuentra en ninguna parte ...)

ásicamente quiero leer, de forma asíncrona, todos los resultados, MIENTRAS el comando se está ejecutand

¿Algunas ideas? ¿Qué estoy haciendo mal

¡Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta