Я хотел бы упомянуть, что я видел много подобных вопросов и попытался код оттуда, но мой код работает асинхронно (я перехожу к другому ViewController только после второго щелчка на кнопку Войти. Вот почему я был бы очень признателен вам, указывая на проблему в моем коде, а затем ссылки мне кто-то еще.Как перенести выполнение кода на главный qeue
у меня есть метод, который отправляет данные Войти на сервер
import UIKit
var IS_LOGGED_IN = Bool()
class LoginDataSender: UIView {
func sendLogInData() {
let myUrl = NSURL(string: "https://somewebsite")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let postString = "username=NAME&password=PASS"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
NSURLSession.sharedSession().dataTaskWithRequest(request) {
(data, respoonse, error) in
if error != nil
{
print("error=\(error)")
return
}
dispatch_async(dispatch_get_main_queue(), {
do {
let myJson = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary
IS_LOGGED_IN = myJson.valueForKey("status") as! Bool
print(IS_LOGGED_IN)
} catch {
print(error)
}
})
}.resume()
}
}
и зову этот метод от ViewController
import UIKit
class LoginViewController: UIViewController {
let logInDataSender = LoginDataSender()
@IBAction func pressLoginButton(sender: AnyObject) {
logInDataSender.sendLogInData()
if IS_LOGGED_IN {
performSegueWithIdentifier("LogInSegue", sender: self)
}
}
Как вы видите, я сохраняю результат в глобальной переменной IS_LOGGED_IN и на основании этого я выполняю операцию или нет. На данный момент я просто жестко определяю логин/пароль для тестирования.
Где я могу разместить dispatch_async, чтобы иметь возможность использовать значение IS_LOGGED_IN при первом нажатии кнопки «Вход в систему»? Большое спасибо!
Если вы читали подобные вопросы, то, конечно, вы видели, что все они говорят вам необходимо добавить обработчик завершения к вашему методу и выполнить его segue внутри него. Вы пробовали это? – dan
@dan Да, благодаря Сантошу сейчас я знаю, как это использовать. Прошу прощения за несколько недель программирования для iOS :) – Robert