2012-07-27 57 views
0

您好我有一個奇怪的問題,NSNotificationCenter將無法運行選擇方法

在我MainViewController I類職位時曾經按鈕按下得到通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"step" object:nil];

在課堂上它我有一個觀察者

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(step) name:@"step" object:nil]; 

它運行「step」方法

- (void)step { 
    NSLog(@"works"); 
} 

,並在名爲Slide1ViewController我有一個觀察者以及

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     NSLog(@"works 2"); 

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(step) name:@"step" object:nil]; 
    } 
    return self; 
} 

和dealloc方法另一個類中刪除

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

在MainViewController的方法被調用,但從來沒有在Slide1ViewController中。

的Slide1ViewController被初始化這樣的:

Slide1ViewController*test = [[Slide1ViewController alloc] initWithNibName:@"Slide1ViewController" bundle:nil]; 
test.view.frame = CGRectMake(1024*0, 0, 1024, 768); 
[contentScrollView addSubview:test.view]; 
+1

當發送通知時,您確定Slide1ViewController在內存中嗎? – dasdom 2012-07-27 11:26:08

+3

你在'Slide1ViewController'中實現了'step'方法嗎? – trojanfoe 2012-07-27 11:27:24

+0

如何初始化您的Slide1ViewController對象?我猜你沒有使用[Slide1ViewController alloc] initWithNibName:function。我想你只是使用init函數。你可以發佈你分配「Slide1ViewController」的代碼嗎? – Srikanth 2012-07-27 11:27:46

回答

0

非常感謝@Phillip Mills您是對的我需要將它聲明爲MainViewController的@property現在它可以工作!非常感謝這個問題讓我瘋狂。

+0

刪除並修改您的問題。 – trojanfoe 2012-07-27 11:57:25

+0

第一反應是你在「添加」之前「發佈」:-) – cloosen 2012-07-27 12:36:16

0

你有發佈通知之前註冊兩個觀察者,所以你必須發佈通知之前並初始化你Slide1viewcontroller在內存中。