Я пытаюсь создать экран аутентификации (входа в систему) для моего приложения.Я использую Alamofire и SwiftyJson.Но я пробовал каждое решение, которое приходит мне в голову, чтобы решить мою проблему.
Ошибка, которую я получаю: Попытка представить viewcontroller, для которого viewController отсутствует в иерархии окон!
Проблема: Когда янажмите кнопку входа на моем экране, я успешно получил имя пользователя и пароль от моего сервиса.Я использую «response.result.isSuccess», чтобы я мог аутентифицировать пользователя на следующей странице после этого шага.Я впервые работаю с alamofire, и я не могу найти решение этой проблемы.
Где это происходит: Когда я получаю результат от службы (логическое значение), я хочу перенаправить пользователя к следующемустр.Я пометил его внизу // ********* Ошибка *********
Я попытался поместить запрос в мой контроллер, который разрушает мою архитектуру MVC, поэтому янужен лучший способ сделать это.Я сталкиваюсь с этой ошибкой в течение 2 дней.
Мой класс менеджера отдыха;
class restManager {
var requestType: String?
var page = loginPage()
var baseURL = "myUrl" // my service url lies down here on my code
init(type: String){
self.requestType = type
}
func builder(info: userInfo){
if(requestType == "get"){
makeGetRequest(path: baseURL, info: info)
}
}
private func makeGetRequest(path: String, info : userInfo) {
let params : [String: String] = ["sUser" : nm, "sPass" : ps, "sToken": "''"]
get(parameters: params)
}
private func get(parameters: [String: String]){
Alamofire.request(baseURL, method:.get ,parameters: parameters).responseJSON { response in
print("Result: \(response.result)")
if let json = response.result.value {
print("JSON: \(json)")
self.page.auth(res: true)
}
}
}
}
И мой контроллер представления loginPage;
class loginPage: UIViewController, UITextFieldDelegate {
@IBOutlet weak var logo: UIImageView!
@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
private var loginInfo = userInfo()
private var mng: restManager?
@IBAction func loginButton(_ sender: roundButton) {
if(usernameTextField.text != "" && passwordTextField.text != ""){
loginInfo.setUsername(info: usernameTextField.text)
loginInfo.setPassword(info: passwordTextField.text)
let mng = restManager(type: "get")
mng.builder(info: loginInfo)
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
func auth(res: Bool){
if (res) {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "homePageNavCtrl") as! homePageNavCtrl
self.present(nextViewController, animated:true, completion:nil) // *********Error********
} else {
let alert = UIAlertController(title: "Error", message: "Invalid username and password.", preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
Я хочу показать свойконтроллер навигации после входа пользователя, но этого не происходит.