0

私のアプリでは GCDAsyncSocket を使用しており、次のように読み書きします。

NSData *bufferWriteData = [NSData dataWithBytesNoCopy:bufferWrite length:17 freeWhenDone:YES];
[self.socket writeData:bufferWriteData withTimeout:-1 tag:1];
[self.socket readDataWithTimeout:-1 tag:1];

デリゲート メソッドでデータを読み込んだ後:

- (void) socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{

    NSLog(@"did read data");

    if (tag == 1){

       //analyze my data...

       [self.socket readDataWithTimeout:-1 tag:1];
    }

このデリゲート メソッド内で "readDataWithTimeout" を思い出すので、この方法ですべてのデータを読み取ります。

私が行う場合、新しい呼び出しを行うときの問題ID:

[self.socket writeData:bufferWriteData withTimeout:-1 tag:2];
[self.socket readDataWithTimeout:-1 tag:2];

tag = 2 で新しい書き込みと新しい読み取りを開始します。デリゲート メソッド「didReadData」が呼び出されると、私のコードは tag = 1; のブロック内に入ります。新しいタグを認識していないようです。

なぜそれが起こるのですか?

4

1 に答える 1