-1

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

我有两 (2) 个 ViewController:A. MainViewController 和 B. LoginViewController。

在我的 MainViewController 中,我有一个注销按钮,它将向我的 LoginViewController 发送一个 url 以加载它(不显示我的 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,我看到它永远不会触发下一步)谢谢!!!!

4

3 回答 3

1

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

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

代替

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

希望它可以帮助你。

于 2013-05-08T06:29:01.863 回答
0

注意分号

[[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];
}
于 2013-05-08T06:32:59.860 回答
0

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

于 2013-05-08T06:28:51.610 回答