0

我一直在努力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!");


}
4

2 回答 2

4

当你使用storyboards时,initWithNibName一般不会调用。它使用initWithCoder. 您确定您正在处理添加观察者的那行代码吗?

如果您遇到看起来某行代码没有被调用的行为,那么最好在此处放置一个断点或 aNSLog并确认它确实如此。

于 2012-11-24T15:29:54.363 回答
1

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

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

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

于 2012-11-24T15:19:06.190 回答