2

私は次のコードを持っています...

-(void) SetSerialNumber
{
    NSLog(@"SetSerialNumber");
    NSString *serialNum = textFieldSecond.text;
    if (textFieldSecond.text == nil) {
        [self performSelectorOnMainThread:@selector(display:) withObject:@"Please Enter the serial number" waitUntilDone:YES];
        return;
    }

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^(void){
        NSString* response;
        [self performSelectorOnMainThread:@selector(display:) withObject:@"Sending Set  Serial Num request" waitUntilDone:YES];
        [[testApp sharedClass] SetSerNumber:serialNum];

        [self performSelectorOnMainThread:@selector(display:) withObject:@"Waiting for Response..." waitUntilDone:YES];
        response = [[Process sharedProcess] readAndProcessData:ACK];
        [self performSelectorOnMainThread:@selector(display:) withObject:rpcresponse waitUntilDone:YES];
    });
}

このメソッドdisplay:は、メッセージをUITextView.

ボタンが押されたときにこの関数を呼び出します。時々、dispatch_async ブロックが呼び出されていません。それはただそれを通り抜けます。ただし、毎回出力されるログ メッセージを確認できます。

誰でもこれを引き起こす可能性のあるものを共有できますか?

4

1 に答える 1

2

「通り抜ける」とはどういう意味ですか? 呼び出しは非同期であるため、その場で発生することはありません。ブロック自体にログを追加し、出力されるかどうかを確認します。

「失敗」したときにserialNumがnilではないことを確信していますか?

于 2013-11-14T19:27:10.447 に答える