1

我有一个简单的设置。

我有一个“TripService”和一个“TripViewController”。当旅行服务发生变化时,例如距离,它应该触发通知,以便通知任何感兴趣的人,在这种情况下是视图控制器。

当我触发绑定到对象的通知时会发生问题,所以我输入:

[NSNotification notificationWithName:TRIPSERVICEDISTANCECHANGE 
                              object:self 
                            userInfo:distanceInfo];

并用

[notificationCenter addObserver:self
                       selector:@selector(distanceChanged:)
                           name:TRIPSERVICEDISTANCECHANGE
                         object:self.tripRecorder];

在这种情况下,我触发了它,但没有任何 distanceChanged 永远不会被触发。

如果我用 nil 替换两个“对象”值,那么这有效。

奇怪的是,如果我在调试模式下运行应用程序并单步执行代码,这可以正常工作。

4

1 回答 1

0

在代码中:

[notificationCenter addObserver:self
                   selector:@selector(distanceChanged:)
                       name:TRIPSERVICEDISTANCECHANGE
                     object:self.tripRecorder];

参数: object:self.tripRecorder告诉通知中心仅将TRIPSERVICEDISTANCECHANGE通知self发送到从self.tripRecorder. 如果在object:设置为时发送通知nil,这告诉我self.tripRecorder可能不是发送通知的对象。但是,您还说如果您使用调试器单步执行程序,则代码可以工作。这听起来像是一个对象生命周期问题(通知对象在通知中心可以处理/传递通知之前被销毁)。notificationWithName:返回一个自动释放的对象,这个对象是否有可能在创建它的方法结束时被释放?

于 2012-11-22T00:56:20.827 回答