Segue 没有在 viewController 中执行
Posted
技术标签:
【中文标题】Segue 没有在 viewController 中执行【英文标题】:Segue not being executed in viewController 【发布时间】:2020-03-15 20:11:52 【问题描述】:我正在开发我的第一个 ios 应用程序。
有一个 viewController 可以检查用户是否已经登录。
print("Usuario actual logeado:",logeado_actual ?? "ninguno")
if (logeado_actual == "OK")
print("logeado:")
self.performSegue(withIdentifier: "sinlogear", sender: nil)
打印输出是
Usuario actual logeado: OK
logeado:
这意味着 segue 应该被执行,但它没有。
segue 存在且标识符为sinlogear
我的代码中是否有任何遗漏或无效的内容?
编辑
完整代码:
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
【问题讨论】:
【参考方案1】:你应该稍微改变一下 performSegue。但首先。
1.) 移除当前segue(通过点击故事板中的连接并删除它)
2.) 拖动一个新的转场(就像你在创建当前转场时所做的那样)
3.) 添加相同的标识符
4.) 修复您的 performSegue,例如:
performSegue(withIdentifier: "sinlogear", sender: self)
————
编辑:无法从viewDidLoad()
执行转场,因为它为时过早。此函数在情节提要出现之前运行。考虑使用viewDidAppear
override func viewDidAppear()
//perform the segue here
【讨论】:
我已经实施了您提案中的所有要点,但没有成功。 @mvasco 您是否按照我的建议删除了它?然后又加了? 是的,我做到了。我会再试一次,然后我会关闭 XCode,然后再检查一次。 @mvasco 删除你的 if 语句并尝试运行 segue :) 我已将 segue 放在 if 语句之外,也不起作用。以上是关于Segue 没有在 viewController 中执行的主要内容,如果未能解决你的问题,请参考以下文章
接收器 (<ViewController>) 没有带有标识符 '' 的 segue
单元测试:ViewController 没有带有标识符的 segue:“segue id”
Receiver (<ViewController>) 没有带有标识符的 segue