我的设置很简单。
我有'TripService'和'TripViewController'。当旅行服务中的某些内容发生变化时,例如应该触发通知的距离,以便通知任何感兴趣的人,在这种情况下是视图控制器。
当我触发绑定到对象的通知时会出现问题,所以我把:
[NSNotification notificationWithName:TRIPSERVICEDISTANCECHANGE
object:self
userInfo:distanceInfo];
并用
收听[notificationCenter addObserver:self
selector:@selector(distanceChanged:)
name:TRIPSERVICEDISTANCECHANGE
object:self.tripRecorder];
在这种情况下,我会触发它,但是任何distanceChanged都不会被触发。
如果我用nil替换两个'object'值,那么这就行了。
奇怪的是,如果我在调试模式下运行应用程序并逐步执行代码,这样可以正常工作。
答案 0 :(得分:0)
在代码中:
[notificationCenter addObserver:self
selector:@selector(distanceChanged:)
name:TRIPSERVICEDISTANCECHANGE
object:self.tripRecorder];
论点:
object:self.tripRecorder
告知通知中心仅向TRIPSERVICEDISTANCECHANGE
发送self
来自self.tripRecorder
的{{1}}通知。如果在object:
设置为nil
时传递通知,则会告诉我self.tripRecorder
可能不是发送通知的对象。但是,如果您使用调试器逐步执行该程序,您还会说该代码有效。这听起来像是对象生命周期问题(通知对象在通知中心处理/传递通知之前被销毁)。 notificationWithName:
返回一个自动释放的对象,该对象是否可能在创建它的方法的末尾被释放?