проблема с экраном входа в систему ios

#ios #json #parsing #login #uiviewcontroller

#iOS #json #синтаксический анализ #аутентификация #uiviewcontroller

Вопрос:

Я разрабатывал приложение для iOS, которое включает в себя экран входа в систему. На этом экране есть два UITextField , где я ввожу имя пользователя и пароль.

Теперь проблема проявляется в следующем: я настроил «else if», чтобы вызвать, UIAlertView если поле пустое.

UIAlertView Появляется, но … в следующем контроллере просмотра.

Еще одна проблема… Он проверяет, верны ли имя пользователя и пароль или нет, и также переходит к следующему контроллеру просмотра.

Это странно, потому что я установил условие «если», чтобы проверить, что текст в обоих UITextFields должен совпадать, чтобы запустить следующий контроллер представления.

У меня есть подозрение, что другой метод, связанный с действием входа в систему, может вмешиваться в процесс.

Я опубликую фрагмент кода, касающийся входа в систему:

 - (void)btn_submit:(id)sender{
    NSString *user = self.usuari.text;
    NSString *pass = self.contrasenya.text;

    NSString * urlBase = @"http://www.v2msoft.com/clientes/lasalle/curs-ios/login.php?username=lluisamp;password=seguro";

    [JSONHTTPClient getJSONFromURLWithString:urlBase completion:^(id json,JSONModelError *err){

JsonUser * user = [[JsonUser alloc]initWithDictionary:json error:nil];

        if(user.succeed){
            self.user_id = user.user_id;

            [self performSegueWithIdentifier:@"Login" sender:self];
        }
        else{
            NSLog(@"error");
        }
    }];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{


    if (([self.usuari.text isEqualToString:@"lluis"]) amp;amp; ([self.contrasenya.text isEqualToString:@"seguro"])){

        Supermarket * supermercat = segue.destinationViewController;
        supermercat.user_id = self.user_id;

    }

    else if (_usuari.text.length == 0 || _contrasenya.text.length == 0)
    {

        [[[UIAlertView alloc] initWithTitle:@"Alerta!"
                                    message:@"Camps buits!"
                                   delegate: nil
                          cancelButtonTitle:@"Cancelar"
                          otherButtonTitles:nil
          ] show];
    }

}
  

И, кроме того, несколько строк класса «JsonUser»:

 #import "JSONModel.h"

@interface JsonUser : JSONModel

@property BOOL succeed;
@property int user_id;
  

Я думаю, что, возможно, я совершаю ошибку, отправляя параметры на сервер через URL, и это может переопределить логин.

Я был бы признателен за любую помощь или совет по этому вопросу.

Комментарии:

1. Черт возьми, берегись! Вы отправляете свои учетные данные имени пользователя и пароля в незашифрованном виде через Интернет.

2. Убедитесь, что вы не связали переход непосредственно с вашей кнопки отправки в IB. Также, да, используйте HTTPS

3. Ах! Спасибо за предупреждение. Но поскольку это не профессиональное приложение (это домашнее задание для колледжа), то это не имеет большого значения. Он не предназначен для установки на устройстве. Это предназначено только для имитации. И данные работают только для доступа к файлу json на удаленном сервере, так что никакого вреда не причинено. Тем не менее, спасибо за предупреждение.

4. @Paulw11: «btn_submit» определяется как IBAction в «Logger.h»: но это «полученное действие» в списке ссылок моего контроллера просмотра. Переход связан с одним VC на другой.

Ответ №1:

Уже слишком поздно для вашей проверки внутри prepareForSegue . Если бы у вас была возможность остановить представление перехода там, метод был бы вызван shouldPresentSegue или что-то в этом роде. Выполните проверку (the else if ) перед вызовом performSegue .

Комментарии:

1. Да — вы можете реализовать shouldPerformSegueWithIdentifier метод developer.apple.com/library/ios/documentation/uikit/reference /…

Ответ №2:

независимо от того, подключаетесь ли вы, переходите от кнопки отправки к контроллеру следующего просмотра или переходите от представления входа к nextviewcontroller. Убедитесь, что вы переходите только с экрана входа в nextviewcontroller, а не с кнопки отправки.

Комментарии:

1. Я проверил это, и переход только связывает оба контроллера просмотра: кнопка не связывается.