我正在开发ios应用程序,ios 5+,使用xcode和objective c。好的,目前正在搞乱通知,我只是需要一些澄清,因为我有点困惑。 让我说我有一个视图控制器,我添加一个像这样的观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showContent:) name:kTPSShowContentNotification object:self];
将对象设置为self。我认为这意味着它只是从那个通知中发出来自该对象。我错了吗?
代码中的其他地方我正在提出类似的通知 [[NSNotificationCenter defaultCenter] postNotificationName:kTPSShowContentNotification object:currentVC];
其中currentVC是最初设置观察者的视图控制器。 我认为这是捕获该通知所需的全部内容,因为帖子告诉通知中心从该视图控制器发送它。但它没有抓住它,我不确定为什么。如果在添加观察者时我将对象设置为nil,那么它会捕获它,但是所有其他视图控制器(如果有的话)也会捕获该通知。有没有办法解决 ?我接近这个完全错了吗?
答案 0 :(得分:2)
要仅从 theObjectSendingNotification 对象接收通知,您应该写一下:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showContent:) name:kTPSShowContentNotification object:theObjectSendingNotification];
并且对象发送通知应该以这种方式发送
[[NSNotificationCenter defaultCenter] postNotificationName:kTPSShowContentNotification object:self];
答案 1 :(得分:1)
如果我说得对,你想发布并从同一个控制器获得通知。所以你可以这样做:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showContent:) name:kTPSShowContentNotification object:self];
[[NSNotificationCenter defaultCenter] postNotificationName:kTPSShowContentNotification object:self];
但如果你的currentVC
ivar指向同一个控制器,那么它确实应该可行。你说它不起作用这一事实让我相信它并没有指向你控制器的同一个实例。