Я подключаю свое приложение к API для отдыха, чтобы войти в систему пользователя. Когда процедура входа в систему завершена, я использую NSNotificationCenter, чтобы сообщить контроллеру о успешном входе в систему и для приложения выполнить сеанс, чтобы взять пользователя из главного меню. Вот мой код:iOS программно сгенерированный 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 число попыток, чтобы успешно войти, то переход выполняется X число раз. Конечно, в основном это главное меню, но конечный результат уродлив. Любые идеи, как это исправить? Возможно, мне следует избегать использования segue и программно принимать пользователя hte непосредственно на другой контроллер?
EDIT С ОТВЕТА
Так что я сделал ошибку, добавив строку
[[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];
Я обновил свой код с помощью регистрационного кода моей модели пользователя ... или, по крайней мере, для входа в систему –
Обновлен мой ответ, чтобы показать, что я имею в виду –
Хорошо ли, если я создаю NSNotification listerner, который никогда не используется? –