GCDAsyncSocket “didReadDataWithTag” Never called w

2019-07-18 00:56发布

In a "getMyFile" method of some XIB file.
I am creating a object of class "A"(subclass of NSOperation) and adding it to a "myFileQueue"(object of NSOperationQueue).

myFileQueue.MaxConcurrentOperationCount = 1;

Problem : didReadDataWithTag" delegate NEVER called in any case.

#import "GCDAsyncSocket.h" 
//and all other required classes are imported correctly

//Class : A
@interface  A : NSOperation
{
  {
   GCDAsyncSocket* socket;
dispatch_queue_t dQueue;

BOOL isWorkDone;
  }
}
@implementation  A {

   -main(){
      @autoreleasepool {

    isWorkDone = NO;
    dQueue = dispatch_queue_create(@"MyDQueue", NULL);
    socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dQueue];

    //NOTE: Even after setting delegateQueue: dispatch_get_main_queue()
    //didReadDataWithTag delegate never called

    NSError *err = nil;
    if (![socket connectToHost:@"192.168.1.142" onPort:12345 error:&err]) // Asynchronous!
    {
    // If there was an error, it's likely something like "already connected" or "no delegate set"
    NSLog(@"I goofed: %@", err);
    }

    do{
        [NSThread sleep:0.2];
        }while(!isWorkDone)


    }
}

   - (void)socket:(GCDAsyncSocket *)sender didConnectToHost:(NSString *)host port:(UInt16)port
   {
NSString* myString= @"testing";
NSData* data=[myString dataUsingEncoding: [NSString defaultCStringEncoding] ];
[socket writeData:data withTimeout:-1 tag:1];
   }
  - (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
  {
[socket readDataToData:[GCDAsyncSocket ZeroData] withTimeout:-1 tag:TAG_RESPONSE_HEADER];
  } 
- (void)socket:(GCDAsyncSocket *)sender didReadData:(NSData *)data withTag:(long)tag
 {
 NSLog(@"didReadDataWithTag called...."); //this method never called in any case

 isWorkDone = YES;
 }
}

0条回答
登录 后发表回答