1

セットアップは簡単です。

「TripService」と「TripViewController」があります。距離など、旅行サービスで何かが変更された場合は、通知を発行する必要があります。これにより、関心のある人(この場合はView Controller)に通知する必要があります。

オブジェクトに関連付けられた通知をトリガーすると問題が発生するため、次のように記述します。

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

でそれを聞いてください

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

この場合、トリガーしますが、distanceChangedが起動されることはありません。

両方の'object'値をnilに置き換えると、これは機能します。

奇妙なことに、これはデバッグモードでアプリを実行し、コードをステップ実行すると正常に機能します。

4

1 に答える 1

0

コード内:

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

引数: から送信された通知object:self.tripRecorderのみを配信するように通知センターに指示します。がに設定されているときに通知が配信されている場合は、通知を送信しているオブジェクトではない可能性があることを示しています。ただし、デバッガーを使用してプログラムをステップ実行すると、コードが機能するとも言います。これは、オブジェクトの存続期間の問題のように聞こえます(通知センターが通知を処理/配信する前に、通知オブジェクトが破棄されています)。自動解放されたオブジェクトを返しますが、このオブジェクトが作成されたメソッドの最後で解放されている可能性はありますか?TRIPSERVICEDISTANCECHANGEselfself.tripRecorderobject:nilself.tripRecordernotificationWithName:

于 2012-11-22T00:56:20.827 に答える