Шаблон дизайна Receptionist (Как перенаправить в основной поток?) - PullRequest
2 голосов
/ 21 ноября 2011

Шаблон 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) из основного потока? Может кто-нибудь помочь мне соединить точки здесь, пожалуйста.

1 Ответ

4 голосов
/ 21 ноября 2011

Чтобы получить основную очередь операций:

[NSOperationQueue mainQueue];
...