Todos,NSStreams Programa de bloqueo!
Lo he bajado hasta este punto mediante comentarios, puntos de interrupción, etc. El programa se bloquea en el código marcado.
-(void) initNetworkCommunication
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.17.1", 2004, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];//WHY MUST YOU CRASH HERE
[outputStream open];//WHY MUST YOU CRASH HERE ALSO!!?!?
NSLog(@"She be opened, sir!");
}
no choque si comento hacia fuera ambas cosas, pero se bloquea si comento hacia fuera uno (por lo tanto es decir, están causando el programa se bloquee). No hay información que se publique en el depurador tampoco. Todo lo que hace es enviarme a main.m y me muestran
"Tema 1: Programa de recepción de la señal: 'EXC_BAD_ACCESS'
Gracias por la ayuda de antemano
Editar: Aquí está mi delegar método, pero ni siquiera se presenta la segunda línea activa en el registro.
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
NSLog(@"stream event %i", streamEvent); //this doesn't post in the log when stream opened...
switch (streamEvent) {
case NSStreamEventOpenCompleted:
NSLog(@"Stream opened");
break;
case NSStreamEventHasBytesAvailable:
if (theStream == inputStream) {
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
NSLog(@"server said: %@", output);
//[self messageReceived:output];
}
}
}
}
break;
case NSStreamEventErrorOccurred:
NSLog(@"Can not connect to the host!");
break;
case NSStreamEventEndEncountered:
[theStream close];
[theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
//[theStream release];
theStream = nil;
break;
default:
NSLog(@"Unknown event");
}
}
El subproceso 1 no es el subproceso principal. Probablemente esté siendo utilizado por las corrientes mientras se están abriendo. El bloqueo podría estar ocurriendo en el método 'stream: handleEvent:' de su delegado, por lo que le sugiero que comience allí. – ughoavgfhw
Si se produce un bloqueo, hay una traza inversa. Publícalo. – bbum
Se agregó algo de información. – Baub