[英]Segue not being executed in viewController
I am working on my first iOS app.我正在开发我的第一个 iOS 应用程序。
There is a viewController that checks if the user has already signed in.有一个 viewController 检查用户是否已经登录。
print("Usuario actual logeado:",logeado_actual ?? "ninguno")
if (logeado_actual == "OK"){
print("logeado:")
self.performSegue(withIdentifier: "sinlogear", sender: nil)
}
The print output is打印输出是
Usuario actual logeado: OK
logeado:
that means that the segue should be executed, but it doesn't.这意味着应该执行 segue,但事实并非如此。
The segue exists and the Identifier is sinlogear
segue 存在且标识符为
sinlogear
Is there anything missing or not valid in my code?我的代码中是否缺少任何内容或无效?
EDIT编辑
Full code:完整代码:
import Alamofire
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var txtEmail: UITextField!
@IBOutlet weak var txtPassword: UITextField!
@IBOutlet weak var btnAcceder: UIButton!
@IBOutlet weak var btnContinuar: UIButton!
@IBOutlet weak var btnRegistro: UIButton!
@IBOutlet weak var btnOlvidar: UIButton!
//Defined a constant that holds the URL for our web service
let URL_USER_REGISTER = "https://.../android_api/login.php"
struct Usuario: Codable {
var id: Int
var activacion: Int
var autorizado: Int
var cif: String
var correo: String
var cuenta: String
var direccion: String
var empresa: String
var facebook_id: String
var foto_usuario: String
var instagram_id: String
var num_estrellas: Int
var tel: String
var token_firebase: String
var twitter_id: String
var usuario: String
var nombre: String
}
@IBOutlet weak var txtLabel: UILabel!
@IBOutlet weak var labelMessage: UILabel!
let defaults = UserDefaults.standard
@IBAction func btnLogin(_ sender: Any) {
print("login pulsado")
//creating parameters for the post request
let parameters: Parameters=[
"email":txtEmail.text!,
"password":txtPassword.text!
]
print(txtEmail.text!)
self.txtLabel.text = ""
//Sending http post request
Alamofire.request(URL_USER_REGISTER, method: .post, parameters: parameters).responseJSON
{
response in
//printing response
print(response)
//getting the json value from the server
if let resultado = response.result.value {
//converting it as NSDictionary
let jsonData = resultado as! NSDictionary
let id = jsonData.value(forKey:"id") as! NSNumber?
let estado = jsonData.value(forKey: "error") as! NSNumber?
if estado == 0 {
print("login:","OK")
self.txtLabel.text = "Datos correctos"
print("error:",estado!)
print("id user:",id!)
if let json = response.result.value as? [String: Any] {
//usuario
do {
guard let user = json["user"] as? [String: Any],
let usuario = user["usuario"] as? String
else {
print("Failed to parse JSON")
return
}
self.defaults.set(usuario, forKey: "usuario")
self.defaults.set("OK", forKey: "logeado")
print(usuario)
}
//nombre
do {
guard let user = json["user"] as? [String: Any],
let nombre = user["nombre"] as? String
else {
print("Failed to parse JSON")
return
}
self.defaults.set(nombre, forKey: "nombre")
print(nombre)
}
//imageb
do {
guard let user = json["user"] as? [String: Any],
let foto_usuario = user["foto_usuario"] as? String
else {
print("Failed to parse JSON")
return
}
self.defaults.set(foto_usuario, forKey: "foto_usuario")
print(foto_usuario)
}
//correo
do {
guard let user = json["user"] as? [String: Any],
let correo_usuario = user["correo"] as? String
else {
print("Failed to parse JSON")
return
}
self.defaults.set(correo_usuario, forKey: "correo")
print(correo_usuario)
}
}
}
else {
print("login:","NO OK")
self.txtLabel.text = "Datos incorrectos"
}
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
let usuario_actual = self.defaults.string(forKey: "usuario")
let nombre_usuario_actual = self.defaults.string(forKey: "nombre")
let foto_usuario_actual = self.defaults.string(forKey: "foto_usuario")
let correo_usuario_actual = self.defaults.string(forKey: "correo")
let logeado_actual = self.defaults.string(forKey: "logeado")
print("Usuario actual:",usuario_actual ?? "ninguno")
print("Usuario actual nombre:",nombre_usuario_actual ?? "ninguno")
print("Usuario actual foto:",foto_usuario_actual ?? "ninguno")
print("Usuario actual correo:",correo_usuario_actual ?? "ninguno")
print("Usuario actual logeado:",logeado_actual ?? "ninguno")
performSegue(withIdentifier: "misegue", sender: self)
if (logeado_actual == "OK"){
print("logeado:")
}
//redondear botones
btnAcceder.layer.cornerRadius = 5
btnAcceder.layer.borderWidth = 1
btnAcceder.layer.borderColor = UIColor.white.cgColor
btnOlvidar.layer.cornerRadius = 5
btnOlvidar.layer.borderWidth = 1
btnOlvidar.layer.borderColor = UIColor.white.cgColor
btnRegistro.layer.cornerRadius = 5
btnRegistro.layer.borderWidth = 1
btnRegistro.layer.borderColor = UIColor.white.cgColor
btnContinuar.layer.cornerRadius = 5
btnContinuar.layer.borderWidth = 1
btnContinuar.layer.borderColor = UIColor.white.cgColor
}
}
You should change the performSegue a bit.您应该稍微更改 performSegue。 But first.
但首先。
1.) Remove the current segue (by clicking the connection in the storyboard and delete it) 1.) 移除当前的 segue(通过点击故事板中的连接并删除它)
2.) Drag a new segue (like you did when created your current one) 2.) 拖动一个新的 segue(就像你在创建当前的 segue 时所做的那样)
3.) Add the same identifier 3.) 添加相同的标识符
4.) Fix your performSegue like: 4.) 修复你的 performSegue 像:
performSegue(withIdentifier: "sinlogear", sender: self)
———— ————
EDIT: A segue cannot be performed from viewDidLoad()
because it's too early.编辑:无法从
viewDidLoad()
执行 segue,因为它太早了。 This function is runned before the storyboard is there.这个函数在故事板出现之前运行。 Consider using
viewDidAppear
考虑使用
viewDidAppear
override func viewDidAppear(){
//perform the segue here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.