2014-01-13 3 views
1

Рассмотрим то, как в следующем примере:Есть ли способ указать степень детализации отправителей/получателей NSNotifications?

  • У меня есть библиотека с книгами, книги есть трудности и жанра.
  • Каждая книга представляет собой экземпляр некоторого объекта и может быть представлена ​​контроллером вида (I.E. вид коллекции, где каждая ячейка представляет собой книгу, возможно, детальный вид, где отображается только одна книга).
  • Данные этих книг могут быть обновлены в фоновом режиме с помощью какого-либо метода синхронизации. Можно обновить только одну книгу или, возможно, один жанр.

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

Что мне не хватает (или не может показаться, что выяснять) в NSNotification - это своего рода детализация, чтобы указать эту потребность. Короче говоря:

  • Есть ли способ сказать NSNotification более конкретно, какого рода уведомлений я хотел бы получить/кому отправить его?
  • В качестве альтернативы, можно ли связать объект с уведомлением? Если это так, я могу смоделировать область (например, метаданные) уведомления в этом объекте и позволить получателю проверить эти данные.

ответ

2

Да, вы можете сделать это, просто укажите ваш объект и упаковать мета-данные в словаре и прикрепить уведомление, как userInfo.and использовать этот метод, чтобы получить возможность отправлять уведомление:

- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo 

тогда вам может получить ваше уведомление:

- (void)handleNotification:(NSNotification *)noti{ 
     NSDictionary *userInfo = [noti userInfo]; 
     YourObject *object = [noti object]; 
} 
+0

Не могу поверить, что раньше этого не осознавал. Благодаря! –

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