让NSNotification工作?

问题描述:

我目前正试图让NSNotification工作,但我遇到了一些麻烦。让NSNotification工作?

我有两个(2)ViewControllers:A. MainViewController & B. LoginViewController。

在我的MainViewController我有一个注销按钮,将发送一个URL到我的LoginViewController加载它(不显示我的loginView)。但是,它不起作用。

在我MainViewController这就是我:

- (IBAction)logout:(id)sender { 

NSURL *logoutURL = [NSURL URLWithString:@"https://myurl.com/logout"]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"logoutInitiated" object:logoutURL]; 


} 

这是我在我的LoginViewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    WebView.delegate = self; 
    WebView.scalesPageToFit = YES; 
    WebView.multipleTouchEnabled = YES; 
    loadCount = 0; 

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

} 

- (IBAction)submitLogout:(NSNotification*)notification { 


    [WebView stopLoading]; 

    NSURL * signOutUrl = (NSURL*)[notification object]; 
    [self loadURL:nil withURL:signOutUrl]; 
} 

我的问题是,当我按下logoutButton没有任何反应。 (使用NSLogs,我发现它从来没有触发下一步)谢谢!

这是因为您在选择器中传递的方法名称是错误的。您需要添加冒号:submitLogout:后缀 使用

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

代替

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

希望它可以帮助你。

+0

WOW我也许应该得到一些休息!我不敢相信我没有抓住这个!非常感谢!!! – KingPolygon 2013-05-08 06:38:45

当您将自己添加为观察者时,可以使用不带分号的选择器“submitLogout”!但是你的方法有一个参数,所以正确的选择器是@selector(submitLogout:)

注意SEMICOLON

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

- (IBAction)logout:(id)sender 
{ 
     NSURL *logoutURL = [NSURL URLWithString:@"https://myurl.com/logout"];  
     [[NSNotificationCenter defaultCenter] postNotificationName:@"logoutInitiated" object:nil  userInfo:[NSDictionary dictionaryWithObjectsAndKeys:logoutURL,@"RECEIVED_URL", nil]]; 
} 

- (IBAction)submitLogout:(NSNotification*)notification 
{  
    [WebView stopLoading]; 
    NSURL * signOutUrl = (NSURL*)[notification objectForKey:@"RECEIVED_URL"]; 
    [self loadURL:nil withURL:signOutUrl]; 
}