вторник, 19 апреля 2011 г.

Нотификация между потоками и GUI ( NSNotificationCenter )

Используете потоки для выполнения нужной работы. Хотите использовать нотификацию о каких то событиях между потоками ( для связи с тем же GUI, выброс ошибок, передача данных и etc ). В этом случае нужно корректно отсылать такие сообщения в контексте главного потока. Проблема может проявится не сразу, в не ожиданный момент.

  1. #pragma mark post thread safe notifity messages   
  2. - (void) sendErrorNotification : (NSString *) message   
  3. {   
  4.   [ [ NSNotificationCenter defaultCenter ] postNotificationName : @"NotifyUser"   
  5.                                                          object : message ];   
  6. }   
  7.    
  8. - (void) postSafeNotifityMessage : (NSString *) message   
  9. {   
  10.        [ self performSelectorOnMainThread : @selector(sendErrorNotification:)   
  11.                                withObject : message     
  12.                             waitUntilDone : NO ];   
  13. }   
  14.    
  15. Пример посылки сообщения об ошибки сети.   
  16.    
  17. - (void) connection : (NSURLConnection *) connection didFailWithError : (NSError *) error   
  18. {   
  19.        [ self postSafeNotifityMessage : [ error localizedDescription ] ];   
  20. }