-[NSCFData writeStreamHandleEvent:]: unrecognized selector sent to instance in a stream callback
- by user295491
Hi everyone,
I am working with streams and sockets in iPhone SDK 3.1.3 the issue is when the program accept a callback and I want to handle this writestream callback the following error is triggered " Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' -[NSCFData writeStreamHandleEvent:]: unrecognized selector sent to instance 0x17bc70'" But I don't know how to solve it because everything seems fine. Even when I run the debugger there is no error the program works. Any hint here will help!
The code of the callback is:
void myWriteStreamCallBack (CFWriteStreamRef stream, CFStreamEventType eventType, void *info){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Connection *handlerEv = [(Connection *)info retain] autorelease];
[handlerEv writeStreamHandleEvent:eventType];
[pool release];
}
The code of the writeStreamHandleEvent:
- (void)writeStreamHandleEvent:(CFStreamEventType) eventType{
switch(eventType) {
case kCFStreamEventOpenCompleted:
writeStreamOpen = YES;
break;
case kCFStreamEventCanAcceptBytes:
NSLog(@"Writing in the stream");
[self writeOutgoingBufferToStream];
break;
case kCFStreamEventErrorOccurred:
error = CFWriteStreamGetError(writeStream);
fprintf(stderr, "CFReadStreamGetError returned (%ld, %ld)\n", error.domain, error.error);
CFWriteStreamUnscheduleFromRunLoop(writeStream, CFRunLoopGetCurrent(),kCFRunLoopCommonModes);
CFWriteStreamClose(writeStream);
CFRelease(writeStream);
break;
case kCFStreamEventEndEncountered:
CFWriteStreamUnscheduleFromRunLoop(writeStream, CFRunLoopGetCurrent(),kCFRunLoopCommonModes);
CFWriteStreamClose(writeStream);
CFRelease(writeStream);
break;
}
}
The code of the stream configuration:
CFSocketContext ctx = {0, self, nil, nil, nil};
CFWriteStreamSetClient (writeStream,registeredEvents, (CFWriteStreamClientCallBack)&myWriteStreamCallBack,(CFStreamClientContext *)(&ctx) );
CFWriteStreamScheduleWithRunLoop (writeStream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
You can see that there is nothing strange!, well at least I don't see it.
Thank you in advance.