gpt4 book ai didi

iOS 以编程方式触发的 segue 在成功时执行多次

转载 作者:行者123 更新时间:2023-11-29 02:04:20 26 4
gpt4 key购买 nike

我将我的应用程序连接到一个休息 API 以登录用户。登录过程完成后,我使用 NSNotificationCenter 通知 Controller 登录成功,并让应用程序执行 segue 以将用户带到主菜单。这是我的代码:

//perform log in, or show error message
-(void)logInAttemptComplete:(NSNotification *)notification
{
Boolean loginSuccessful = (Boolean)[[notification userInfo] objectForKey:@"loginSuccessful"];

[SVProgressHUD dismiss];
//if the suer was successfully logged in, take him to the main menu
if(loginSuccessful)
{
//go to the main menu
[self performSegueWithIdentifier:@"logInSuccessfulSegue" sender:self];
}
else
{
//copy error code and display appropriate error
int errorCode = [[[notification userInfo] objectForKey:@"HTTP Message"] intValue];
//404 no server, 401 wrong password/no user
if(errorCode==401)
{
//create and show error alert view
UIAlertView *loginErrorAlertView = [[UIAlertView alloc] initWithTitle:@"Log In Failure" message:@"Wrong credentials. Check your Username and/or Password." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[loginErrorAlertView show];
}
else
{
//create and show error alert view
UIAlertView *loginErrorAlertView = [[UIAlertView alloc] initWithTitle:@"Log In Failure" message:@"Failed to contact server, please try again later." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[loginErrorAlertView show];
}
}
}

问题是,如果第一次尝试登录不成功,假设需要 X 次尝试才能成功登录,那么 segue 将执行 X 次。它当然最终出现在主菜单上,但最终结果是丑陋的。任何想法如何解决这一问题?也许我应该避免使用 segue 并以编程方式将 hte 用户直接带到另一个 Controller ?

编辑答案

所以我通过添加行犯了一个错误

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

在按下登录按钮的函数中。

我通过在登录尝试失败后删除观察者来修复它

if(loginSuccessful)
{
//go to the main menu
[self performSegueWithIdentifier:@"logInSuccessfulSegue" sender:self];
}
else
{

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"logInNotification" object:nil];

最佳答案

我会使用两个不同的通知,这段代码似乎比它应该的更复杂。

你没有提供你的登录码本身,所以我只能笼统地回答。创建两个通知(一个用于成功,一个用于登录失败)。登录 Controller 根据登录尝试的结果发送通知。

您将上述方法拆分为两个方法,这两个方法在发送任一通知时调用。

您的代码可能如下所示:

[manager GET:stringWithURLforRequest parameters:nil success:^(AFHTTPRequestOperation *task, id responseObject) {

// ...
[[NSNotificationCenter defaultCenter] postNotificationName:@"LogInSuccessful" object:nil userInfo:nil];

} failure:^(AFHTTPRequestOperation *task, NSError *error) {

// ...
[[NSNotificationCenter defaultCenter] postNotificationName:@"LogInFailure" object:nil userInfo:@{ @"HTTP Message":statusCodeNumber}];

}];

...你只需要添加另一个通知来监听你的其他 View Controller 。如果您这样做,您可以更安全地区分登录失败和成功(更好的语义)。

关于iOS 以编程方式触发的 segue 在成功时执行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29968178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com