2016-10-22 4 views
0

Привет Я использую методы делегата в Objective C и нуждаюсь в некоторой помощи. У меня есть следующие функции A и B. B - функция делегата.Использование методов делегата с семафорами в Objective C

-(BOOL) A{ 
    int cmd = 73; 
    [_serialPort sendData:cmd]; 
    NSLog("Hello"); 
    return TRUE; 
} 

//Delegate function 

-(void) B{ 
    //When some data is received on the serial port function B is called 
} 

Но функция A не дожидается получения данных на последовательном порту. Как заблокировать функцию A до тех пор, пока некоторые данные не будут получены на последовательном порту? Я использую библиотеку ORSSerialPort в объекте-C.

+2

Blocking это плохая идея, так или иначе. Обычно вы просто обрабатываете поступающие данные асинхронно через метод делегирования – Paulw11

+0

@ ZaidPathan Да, когда я хочу отправлять данные по последовательному порту, я вызываю функцию A. – macNewbie

+0

Где вы вызываете метод 'A'? –

ответ

1

Похоже, ORSSerialPort уже использует делегат для получения данных.

- (void)serialPort:(ORSSerialPort *)serialPort didReceiveData:(NSData *)data { 
    // Assuming the delegate has method A 
    [self A]; 
} 

-serialPort:didReceiveData: является метод делегата от ORSSerialPort.

Код выше будет в основном ждать, пока данные не будут получены, а затем, как только это произошло, он будет вызывать А.