¿No se puede escribir en NSOutputStream inmediatamente después de que esté abierto?

Estoy aprendiendo network programminges iOS desde este tutorial. Intenté modificar el código para que se envíe una respuesta al server inmediatamente después de que una connection sea exitosa. La única parte del código que cambio está en esta function. El problema es que la aplicación se detiene y no ocurre nada en la línea [outputStream write:[data bytes] maxLength:[data length]]; Así NSLog(@"sent test"); no se ejecuta. ¿Qué estoy haciendo mal?

 - (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { NSLog(@"stream event %i", streamEvent); switch (streamEvent) { case NSStreamEventOpenCompleted: NSLog(@"Stream opened"); //my code if (theStream == outputStream) { NSLog(@"outputStream"); NSData* data = [NSData dataWithBytes:@"test" length:4]; [outputStream write:[data bytes] maxLength:[data length]]; NSLog(@"sent test"); } //end my code break; case NSStreamEventHasBytesAvailable: if (theStream == inputStream) { uint8_t buffer[1024]; int len; while ([inputStream hasBytesAvailable]) { len = [inputStream read:buffer maxLength:sizeof(buffer)]; //... } } break; case NSStreamEventErrorOccurnetworking: NSLog(@"Can not connect to the host!"); break; case NSStreamEventEndEncountenetworking: [theStream close]; [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [theStream release]; theStream = nil; break; default: NSLog(@"Unknown event"); } } 

EDITAR: solución encontrada aquí ¿Cómo utilizar el post de escritura de NSOutputStream?

ok mientras trabajaba con conexiones de zócalo sin formatting, he usado ese código para enviar datos al server. te puede ser útil

 if (theStream == outputStream) { NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];//str is my string to send int byteIndex = 0; uint8_t *readBytes = (uint8_t *)[data bytes]; readBytes += byteIndex; // instance variable to move pointer int data_len = [data length]; // NSLog(@"%i",[data length]); unsigned int len = ((data_len - byteIndex >= 1024) ? 1024 : (data_len-byteIndex)); uint8_t buf[len]; (void)memcpy(buf, readBytes, len); len = [outputStream write:(const uint8_t *)buf maxLength:len]; byteIndex += len; }