2

я следующий код ...dispatch_async не работает все время

-(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 не вызывается. Его просто проваливается. Тем не менее, я вижу сообщение журнала, которое печатается каждый раз.

Может кто-нибудь может поделиться тем, что может быть причиной этого?

+0

Если эта функция вызывается при нажатии кнопки, почему вызов первого 'performSelectorOnMainThread: withObject: waitUntilDone:'? –

+0

ok для этого я не должен был использовать performSelectorOnMainThread: его просто для сообщения для пользователя, не более того. –

ответ

2

Что вы подразумеваете под "падением"? Вызов асинхронный, поэтому этого не произойдет. Добавьте журнал в сам блок и посмотрите, будет ли он печататься.

Вы уверены, что когда он «провалится», serialNum не равен нулю?

+0

Да, это происходит, когда serialNum не ноль. И это работает иногда. Кроме того, я получаю журнал, когда я нажимаю кнопку, но блок dispatch_async не запускается. Еще одна проблема заключается в том, что в «readAndProcessData» он бесконечно ждет очереди на наличие данных, это может быть проблемой. В любом случае спасибо за головы. –

Смежные вопросы