我一直试图让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!");
}
答案 0 :(得分:4)
使用故事板时,通常不会调用initWithNibName
。它使用initWithCoder
。您确定要使用添加观察者的那行代码吗?
如果你的某些行为似乎没有被调用,那么在那里放置一个断点或NSLog
并确认它确实是好的。
答案 1 :(得分:1)
我认为这可能是因为在触发通知时你的page2视图控制器不存在。
第二个视图控制器在从它的nib唤醒时注册观察,但如果它尚未创建,则它没有注册第一个视图控制器正在发送的通知。
您应该做的是使用segues根据操作加载视图控制器。