2017-02-08 3 views
0

Я пытаюсь войти с двумя текстовыми полями (имя пользователя и пароль). Я отправляю эти две переменные в веб-службу, чтобы проверить, есть ли имя пользователя и пароль, или нет. Я получаю ответ как сообщение «успех» или «отказ» от веб-службы в отношении этих двух значений. Затем я получаю это сообщение и с этим сообщением устанавливаю значение флага. Но после сеанса я не получаю значение этого флага. его значение по умолчанию установлено false.Как установить переменные в задаче данных URLSession?

Проблема заключается в том, что я хочу войти в систему под действием кнопки, которая вызовет веб-службу, используя функцию URLSession и данных, и я не могу установить флаг. Я могу сделать это с помощью синхронного запроса NSURL, но этот код устарел.

Вы можете просматривать изображения для кода для функции действия кнопки входа в систему, а также для функции веб-сервиса. login button action web service function

Заранее спасибо.

+0

Мы не будем нажимать на ссылку и просматривать изображения кода. Отправьте свой код, отмеченный кодовыми тегами, здесь. Проблема почти наверняка заключается в том, что ваша задача входа асинхронна, и результаты будут недоступны до тех пор, пока не будет вызван ваш обработчик завершения или метод делегирования. Таким образом, вам нужно будет перестроить свой код, но мы не можем сказать вам, как реструктурировать ваш код, пока вы его не опубликуете. –

ответ

1

Способ, которым вы используете метод webServiceCalledMethod, неверен. Задача, связанная с URLSession, выполняется несинхронно. В результате возвращается переменная isLogin до того, как будет запущен ваш dataTask.

Вместо того, чтобы возвращать Bool из асинхронного метода, используйте шаблон закрытия или делегата для уведомления о состоянии завершения задачи данных.

+0

Да, точно. Он возвращается до выполнения задания. Я проверил это. & да, это асинхронный метод. Вот почему я пытался использовать синхронный метод NSURL, но он устарел. Его предложение предположить, что я должен использовать URLSession. Но я не мог понять, является ли сеанс асинхронным или синхронным. Наконец, я использовал семафоры для ожидания. Большое спасибо. – aditya

+0

Нет, не используйте семафоры. Это все равно будет блокировать основной поток. Вы хотите реорганизовать свой код для прохождения в блоке завершения, который вызывается после завершения задачи async. Вам нужно остановиться и прочитать эту концепцию, пока вы ее не поймете. –

+0

okay понимается. Большое спасибо @DuncanC – aditya