Tre*_*ler 38 xcode ios parse-platform swift
我试图在用户成功登录到他们的帐户后切换视图控制器,但它无法正常工作.我不能直接使用segue,因为如果单击登录按钮,它将转到该视图控制器,无论信息是否正确.我已经尝试了所有我知道但没有成功的事情.这是我正在尝试的代码.
@IBAction func loginTapped(sender: AnyObject) {
let username = usernameField.text
let password = passwordField.text
if username.isEmpty || password.isEmpty {
var emptyFieldsError:UIAlertView = UIAlertView(title: "Please try again", message: "Please fill in all the fields we can get you logged in to your account.", delegate: self, cancelButtonTitle: "Try again")
emptyFieldsError.show()
}
PFUser.logInWithUsernameInBackground(username, password:password) {
(user: PFUser?, error: NSError?) -> Void in
if user != nil {
self.performSegueWithIdentifier("Klikur", sender: self)
} else {
if let errorString = error!.userInfo?["error"] as? String {
self.errorMessage = errorString
}
self.alertView("Please try again", message: "The username password combiation you have given us does not match our records, please try again.", buttonName: "Try again")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我将故事板ID设置为"测试",并且在输入正确信息时不切换视图控制器.有人可以帮我解决我的问题吗?
Bas*_*Zen 67
[假设您的代码没有崩溃,而是只是没有发生错误]
至少有一个问题是:
self.performSegueWithIdentifier("Test", sender: self)
Run Code Online (Sandbox Code Playgroud)
应该:
dispatch_async(dispatch_get_main_queue()) {
[unowned self] in
self.performSegueWithIdentifier("Test", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
请记住,必须在主线程的队列上执行所有UI操作.你可以通过检查证明你自己错了!
NSThread.isMainThread() // is going to be false in the PF completion handler
Run Code Online (Sandbox Code Playgroud)
附录
如果有任何机会self可能会成为零,如获取驳回或以其他方式释放,因为它是没有必要的,你应该弱捕捉自我为[weak self]不unowned和使用安全的解包:if let s = self { s.doStuff() }或可选的链接:self?.doStuff(...)
附录2
这似乎是一个受欢迎的答案,所以在这里提到这个更新的替代方案很重要:
NSOperationQueue.mainQueue().addOperationWithBlock {
[weak self] in
self?.performSegueWithIdentifier("Test", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
请注意,来自https://www.raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift:
NSOperation vs. Grand Central Dispatch(GCD)
GCD [dispatch_*calls]是一种表示将同时执行的工作单元的轻量级方法.
与GCD相比,NSOperation增加了一些额外的开销,但您可以在各种操作之间添加依赖关系并重新使用,取消或暂停它们.
附录3
Apple隐藏了单线程规则:
注意
在大多数情况下,只能从应用程序的主线程中使用UIKit类.对于从UIResponder派生的类或涉及以任何方式操纵应用程序的用户界面的类尤其如此.
SWIFT 4
DispatchQueue.main.async(){
self.performSegue(withIdentifier: "Test", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
参考:
https://developer.apple.com/documentation/uikit
Met*_*tte 18
登录问题我遇到了同样的问题.可能我们做同样的教程.在命名segue标识符后,您需要替换:
performSegueWithIdentifier("Klikur", sender: self)
Run Code Online (Sandbox Code Playgroud)
有:
dispatch_async(dispatch_get_main_queue()){
self.performSegueWithIdentifier("Klikur", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
需要在故事板segue中将seque类型设置为"show(例如Push)".希望它会奏效.
小智 14
确保你把你的:
self.performSegue(withIdentifier: ..., ...)
在viewDidAppear或更高版本中.它在viewWillAppear或viewDidLoad中不起作用.
您传递给的segue标识符performSegueWithIdentifier(_:sender:)必须与您在故事板中为segue指定的ID 完全匹配.我假设您在登录视图控制器和成功视图控制器之间有一个segue,它应该是应有的; 如果没有,则按住ctrl +从第一个视图控制器拖动到第二个视图控制器,然后在故事板中选择segue的图标并将其ID设置为Klikur.正如一位评论者所说,不要在按钮点击上执行导航,因为这违背了设置segue的主要目的,即在故事板中给出应用程序流的直观指示.
编辑:这是登录视图控制器的代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var usernameField: UITextField!
@IBOutlet weak var passwordField: UITextField!
@IBAction func attemptLogin(sender: AnyObject) {
if !usernameField!.text!.isEmpty && !passwordField!.text!.isEmpty {
performSegueWithIdentifier("Klikur", sender: self)
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if "Klikur" == segue.identifier {
// Nothing really to do here, since it won't be fired unless
// shouldPerformSegueWithIdentifier() says it's ok. In a real app,
// this is where you'd pass data to the success view controller.
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
swift 3.x
DispatchQueue.main.async(){
self.performSegue(withIdentifier: "Klikur", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
小智 5
DispatchQueue.main.async() {
self.performSegue(withIdentifier: "GoToHomeFromSplash", sender: self)`
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54869 次 |
| 最近记录: |