NSNotification无效

时间:2012-11-24 15:12:38

标签: ios xcode

我一直试图让NSNotification工作。对于测试,我想要一个使用storyBoards加载新viewController的按钮。单击该按钮时,它应触发appObserver在第二个ViewController中拾取的通知(我已将其命名为Page2)。在Page2中,NSNotificationCenter应该启动一个方法(myMethod :)并打印出一个简单的NSLog。 不幸的是,它不起作用,因为myMethod没有被调用。我究竟做错了什么 ???

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (IBAction)goToPage2Button:(id)sender {

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

}

#import "Page2.h"

@interface Page2 ()

@end


@implementation Page2

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
       [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(myMethod:) name:@"test" object:nil];


    }
    return self;
}

-(void)myMethod:(NSNotification *)notification{


    if ([[notification name] isEqualToString:@"test"])
        NSLog (@"Successfully received the test notification!");


}

2 个答案:

答案 0 :(得分:4)

使用故事板时,通常不会调用initWithNibName。它使用initWithCoder。您确定要使用添加观察者的那行代码吗?

如果你的某些行为似乎没有被调用,那么在那里放置一个断点或NSLog并确认它确实是好的。

答案 1 :(得分:1)

我认为这可能是因为在触发通知时你的page2视图控制器不存在。

第二个视图控制器在从它的nib唤醒时注册观察,但如果它尚未创建,则它没有注册第一个视图控制器正在发送的通知。

您应该做的是使用segues根据操作加载视图控制器。