2012-03-12 3 views
0

私は次のことをAViewControllerで行います。私にはクラッシュがあります。私のクラスはなぜ通知を受け取るのですか?

[self.navigationController popViewControllerAnimated:NO]; 
[[AppDelegate delegate].tabBarController setSelectedIndex:1]; 

AViewControllerの割り当てが解除され、BViewControllerは(それが最初のタブである)が登場します。

私はクラッシュしました。

1)AViewController callesのdealloc

2)BViewControllerが送信通知

3)私はなぜAViewControllerがntf_onRotation通知を受け取るん

AViewController

のonRotation方法でクラッシュを取得しますか? removeObserverメソッドを追加しました。

私のクラス

@implementation AViewController 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(onRotation:) 
              name:@"ntf_onRotation" 
              object:nil]; 
} 

-(void) viewDidUnload 
{ 
[super viewDidUnload]; 
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ntf_onRotation" object:nil]; 
} 

- (void)dealloc 
{ 
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ntf_onRotation" object:nil]; 
[super dealloc]; 
} 

@end 

@implementation BViewController 

- (void)viewDidAppear:(BOOL)animated 
{ 
[super viewDidAppear:animated]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"ntf_onRotation" object:nil]; 
} 

- (void)viewWillAppear:(BOOL)animated 
    { 
    [super viewWillAppear:animated]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ntf_onRotation" object:nil]; 
} 
@end 
+0

あなたはAViewControllerへのすべての他の参照をチェックしましたか? AViewControllerが引き続き通知を受け取った場合、AViewControllerがライブであることを意味します。 – beryllium

+0

私はdeallocにNSLogを追加しました。私はそれが呼ばれたのを見た。 AViewControllerの保持カウントがゼロに等しいことを意味します。 – Voloda2

答えて

0

これは未知のものも含めてすべてのオブザーバを削除する必要があります。

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
関連する問題