2012-11-21 25 views
1

我有一個簡單的設置。NSNotificationService只在全局通知的情況下工作

我有'TripService'和'TripViewController'。旅行服務中的某些內容發生變化時,例如距離應該發出通知,以便通知任何感興趣的人,在這種情況下應該通知視圖控制器。

問題發生時,我觸發綁定到對象的通知,所以我把:

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

,並聆聽它

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

在這種情況下,我觸發它,但沒有distanceChanged永遠不會被解僱。

如果我用零代替'對象'值,那麼這個工作。

奇怪的是,這工作正常如果我在調試模式下運行應用程序,並通過代碼。

+0

仔細檢查addObserver中的對象實際上是發佈通知的同一個對象。對象參數說「我只想聽到這個特定的對象」,所以看起來就像是你錯了。 – Dcritelli

回答

0

在代碼:

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

的說法: object:self.tripRecorder告訴通知中心只提供TRIPSERVICEDISTANCECHANGE通知self被從self.tripRecorder發送。如果object:設置爲nil時正在傳遞通知,那告訴我self.tripRecorder可能不是發送通知的對象。但是,如果您使用調試程序逐步執行程序,您也會說代碼正常工作。這聽起來像是一個對象生命期問題(通知對象在通知中心可以處理/傳遞通知之前被銷燬)。 notificationWithName:返回一個自動釋放對象,是否有可能在創建該對象的方法結束時釋放該對象?

+0

我刪除它,並做到了,它的工作,所以它一定指向了錯誤的地址.....怪異 –

+0

很高興聽到你得到它的工作! –

相關問題