SWRevealViewController segue 只用 1 个按钮卡住
SWRevealViewController segue get stuck only with 1 button
我创建了一个应用程序,需要通过两种方式登录:
- Facebook登入,
- 正常登录(电子邮件、密码)。
我已经使用 Facebook SDK 添加了 FBLogin 并修改了一个按钮,以便不使用 fb 默认按钮。我已经从我的 loginView 添加了一个 segue(Present Modally)到另一个带有 segue(称为 "fb_login")的 View,并将 segue class 设置为 "SWRevealViewControllerSeguePushController"。
现在,我对登录按钮做了同样的事情。更改了标识符并设置了 segue class,但是当我推送它时,我的应用程序卡住了(xCode 上没有错误)所以我需要关闭它并重新打开它。
我尝试将 segue 类型从 "Preset Modally" 更改为 "reveal view Controller set controller",但没有任何改变(它没有卡住,但它不起作用)。
这是按下登录按钮时的功能:
@IBAction func loginButtonPressed(_ sender: UIButton) {
var email = emailTextField.text
var password = passwordTextField.text
let urlString = "..."
let urlwithPercentEscapes = urlString.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: urlwithPercentEscapes!)
URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
if error != nil {
print(error)
} else {
do {
//PARSEDDATA CONTIENE TUTTE LE TUPLE
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary
let temp = parsedData["user"] as! NSArray
var userLogin = temp[0] as! NSDictionary
if((userLogin["login"]) as! Int == 1){ //login successfully
self.user.name = userLogin["name"]! as! String
self.user.surname = userLogin["surname"]! as! String
self.user.email = userLogin["email"]! as! String
self.user.url_image = userLogin["profile_img_url"]! as! String
self.user.id_user = Int(userLogin["id_user"]! as! String)!
self.user.gender = Int(userLogin["gender"]! as! String)!
self.user.birthday = userLogin["birthday"]! as! String
self.user.id_license = userLogin["id_license"]! as! String
self.user.registration_date = userLogin["registration_date"]! as! String
self.user.expire_date = userLogin["expire_date"]! as! String
self.user.mac_address = userLogin["mac_address"]! as! String
self.user.license_key = userLogin["license_key"]! as! String
self.user.license_type = Int(userLogin["license_type"]! as! String)!
sleep(2)
self.performSegue(withIdentifier: "normal_login", sender: nil)
}else{ //login failed
print("login failed")
}
} catch let error as NSError {
print(error)
}
}
}).resume()
}
谢谢大家! (我正在使用 Swift 3.0)
出现此问题是因为您正试图从后台线程操作 UI。您应该始终只在主线程上进行 UI 相关操作。
试试:
DispatchQueue.main.async
{
self.performSegue(withIdentifier: "normal_login", sender: nil)
}
我创建了一个应用程序,需要通过两种方式登录: - Facebook登入, - 正常登录(电子邮件、密码)。
我已经使用 Facebook SDK 添加了 FBLogin 并修改了一个按钮,以便不使用 fb 默认按钮。我已经从我的 loginView 添加了一个 segue(Present Modally)到另一个带有 segue(称为 "fb_login")的 View,并将 segue class 设置为 "SWRevealViewControllerSeguePushController"。
现在,我对登录按钮做了同样的事情。更改了标识符并设置了 segue class,但是当我推送它时,我的应用程序卡住了(xCode 上没有错误)所以我需要关闭它并重新打开它。
我尝试将 segue 类型从 "Preset Modally" 更改为 "reveal view Controller set controller",但没有任何改变(它没有卡住,但它不起作用)。
这是按下登录按钮时的功能:
@IBAction func loginButtonPressed(_ sender: UIButton) {
var email = emailTextField.text
var password = passwordTextField.text
let urlString = "..."
let urlwithPercentEscapes = urlString.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: urlwithPercentEscapes!)
URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
if error != nil {
print(error)
} else {
do {
//PARSEDDATA CONTIENE TUTTE LE TUPLE
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary
let temp = parsedData["user"] as! NSArray
var userLogin = temp[0] as! NSDictionary
if((userLogin["login"]) as! Int == 1){ //login successfully
self.user.name = userLogin["name"]! as! String
self.user.surname = userLogin["surname"]! as! String
self.user.email = userLogin["email"]! as! String
self.user.url_image = userLogin["profile_img_url"]! as! String
self.user.id_user = Int(userLogin["id_user"]! as! String)!
self.user.gender = Int(userLogin["gender"]! as! String)!
self.user.birthday = userLogin["birthday"]! as! String
self.user.id_license = userLogin["id_license"]! as! String
self.user.registration_date = userLogin["registration_date"]! as! String
self.user.expire_date = userLogin["expire_date"]! as! String
self.user.mac_address = userLogin["mac_address"]! as! String
self.user.license_key = userLogin["license_key"]! as! String
self.user.license_type = Int(userLogin["license_type"]! as! String)!
sleep(2)
self.performSegue(withIdentifier: "normal_login", sender: nil)
}else{ //login failed
print("login failed")
}
} catch let error as NSError {
print(error)
}
}
}).resume()
}
谢谢大家! (我正在使用 Swift 3.0)
出现此问题是因为您正试图从后台线程操作 UI。您应该始终只在主线程上进行 UI 相关操作。
试试:
DispatchQueue.main.async
{
self.performSegue(withIdentifier: "normal_login", sender: nil)
}