有没有办法在NSNotifications的发件人/收件人上指定粒度?

时间:2014-01-13 09:09:20

标签: ios objective-c

考虑以下示例:

  • 我有一个带书籍的图书馆,书籍有困难和类型。
  • 每本书都是某个对象的实例,可以由视图控制器呈现(例如,集合视图,其中每个单元格是一本书,可能是一个只显示一本书的详细视图)。
  • 这些书的数据可以通过某种同步方法在后台更新。可能只有一本书被更新,或者可能只有一种类型。

我希望这些类(主要是视图)能够收到更新通知。我希望这些通知非常清楚。因此,当所有非小说类书籍都更新时,这应该是应该通知的。 我当然可以为每种类型使用单独的通知名称,但如果我们讨论的是整个库,那么包含数千个对象的大型集合视图将意味着注册了太多的观察者。在这种情况下,观察者可能会选择接收关于书籍的任何通知,可能是任何类型的通知。

我在NSNotification中遗漏(或似乎无法弄清楚)的内容是指定此需求的某种粒度。 简而言之:

  • 有没有办法更具体地告诉NSNotification我希望收到哪些通知/将其发送给谁?
  • 或者,我可以将对象附加到通知中吗?如果是这样,我可以对该对象中的通知的范围(如元数据)进行建模,并让接收方检查这些数据。

1 个答案:

答案 0 :(得分:2)

是的,您可以这样做,只需指定您的对象并将您的元数据打包到字典中,并将您的通知作为userInfo附加。并使用此方法发布通知:

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

然后您可以访问您的通知,如:

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