Шаблон Receptionist - это шаблон дизайна, который предоставляет способ перенаправления события из одного потока в другой поток для его обработки. Магия использования Key-Value Observing (KVO). Дополнительная информация: Администратор
Я понимаю концепцию и код. Я борюсь с тем, чтобы понять, как сделать следующее:
"Одна из распространенных ситуаций, когда шаблон Receptionist полезен, это
наблюдение значения ключа. При наблюдении значения ключа изменения в значении
свойство модельного объекта передается наблюдателям через КВО
уведомления. Однако изменения в модельном объекте могут произойти на
фоновый поток. Это приводит к несоответствию потока, потому что изменения
к состоянию объекта модели обычно приводит к обновлениям для пользователя
интерфейс, и это должно происходить в основном потоке. В этом случае вы
хочу перенаправить уведомления KVO в основной поток. где
могут произойти обновления пользовательского интерфейса приложения. "
Вот фрагмент того, что описано в примере реализации.
Клиентский объект предоставляет код блока, который обновляет пользователя
интерфейс, когда он создает объект приемной, как показано в листинге
4-4. Обратите внимание, что когда он создает объект приемной, клиент
проходит в очередь операций, в которой должен выполняться блок, в
в этом случае основная очередь операций.
RCReceptionist *receptionist = [RCReceptionist receptionistForKeyPath:@"value" object:model queue:mainQueue task:^(NSString *keyPath, id object, NSDictionary *change) {
NSView *viewForModel = [modelToViewMap objectForKey:model];
NSColor *newColor = [change objectForKey:NSKeyValueChangeNewKey];
[[[viewForModel subviews] objectAtIndex:0] setFillColor:newColor];
}];
Просто спросили, как получить основную очередь операций (она же mainQueue) из основного потока? Может кто-нибудь помочь мне соединить точки здесь, пожалуйста.