2012-03-12 73 views
0

在AViewController中我做了下一件事。我有一個崩潰。爲什麼我的班級收到通知?

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

AViewController將被釋放並且BViewController將會出現(它是第一個標籤)。

我有一個崩潰。

1)AViewController卡列斯的dealloc

2)BViewController發出通知

3)我得到崩潰AViewController

的onRotation方法爲什麼AViewController收到ntf_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 2012-03-12 16:20:04

+0

我添加NSLog到dealloc。我看到它被稱爲。這意味着AViewController的保留計數等於零。 – Voloda2 2012-03-13 16:11:58

回答

0

這應該刪除所有觀察員包括任何未知的:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
相關問題