Swift performSegueWithIdentifier ne fonctionne pas
Je suis en train de passer d'affichage des contrôleurs après qu'un utilisateur se connecte avec succès à leur compte, mais il ne fonctionne pas correctement. Je ne peux pas utiliser un enchaîner directement parce que si la connexion bouton est cliqué, cela va aller de ce point de vue contrôleur, peu importe si l'information est correcte ou non. J'ai essayé tout ce que je sais, sans succès. C'est le code que j'essaie.
@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")
}
}
}
J'ai le storyboard set ID "Test" et il n'est pas vue de commutation contrôleur de la bonne saisie des données. Quelqu'un peut-il m'aider à résoudre mon problème?
- Supprimer la séquence et sur l'événement clic du bouton effectuer la navigation.
- Ce code est dans le fuction buttonTapped de sorte qu'il doit la transition, mais ses pas.
- Avez-vous supprimé la séquence du storyboard?
- Oui il n'y a pas de transition reliant la connexion à la sucessfulLoginPage
- Heh, j'ai trouvé mon problème comme ça avec debug ce qui Enchaîne, j'ai: po moi.effectuer(NSSelectorFromString("storyboardSegueTemplates")). Aussi, j'ai trouvé, il n'est pas enchaîne après le précédent UIViewController ajouté dans UINavigationStack par code pas par performSegue :)), je résoudre ce problème par performSegue pour contrôleur précédent 🙂
Vous devez vous connecter pour publier un commentaire.
[En supposant que votre code n'est pas de s'écraser, mais à défaut d'enchaîner]
Au moins un problème:
devrait être:
Rappelez-vous que toute l'INTERFACE utilisateur opérations doivent être réalisées sur le thread principal de la file d'attente. Vous pouvez prouver à vous-même que vous êtes sur le mauvais fil, par la vérification:
ADDITIF
Si il n'y a aucune chance
self
pourrait devenir nul, comme l'obtention d'rejeté ou autrement libéré parce qu'il n'est pas nécessaire, vous devez capturer l'auto faiblement comme[weak self]
pasunowned
, et les consignes de sécurité déballage:if let s = self { s.doStuff() }
ou facultatif de la chaîne:self?.doStuff(...)
ADDENDUM 2
Cela semble être une réponse il est donc important de mentionner cette nouvelle alternative ici:
Remarque, à partir de https://www.raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift:
ADDENDUM 3
Apple se cache le single-threaded règle ici:
SWIFT 4
Référence:
https://developer.apple.com/documentation/uikit
J'ai eu le même problème avec problème de connexion. probablement nous faire le même tuto. Après avoir nommé votre segue identifiant que vous avez besoin de remplacer:
avec:
type de seque doit être définie comme "afficher (par exemple, Pousser)" dans la table de montage séquentiel des enchaînements.
Espérons que cela fonctionnera.
Assurez-vous que vous mettez votre:
self.performSegue(withIdentifier: ..., ...)
dans viewDidAppear ou plus tard. Il ne fonctionnera pas dans viewWillAppear ou viewDidLoad.
La séquence identifiant que vous passez à
performSegueWithIdentifier(_:sender:)
doit exactement correspondre à l'ID que vous avez donné à la segue dans le storyboard. Je suppose que vous avez une séquence entre la connexion view controller et le succès-vue-contrôleur, qui est comme il se doit; si pas, ctrl+faire glisser à partir de la première à la seconde vue-contrôleur, puis sélectionnez la séquence de l'icône dans le storyboard et l'ensemble de ses ID deKlikur
. Ne pas effectuer la navigation sur le bouton cliquez sur, comme un intervenant l'a dit, parce que cela va à l'encontre de l'objectif principal d'avoir enchaîne, qui est de donner un visual indication de la demande de débit dans le plan de montage.EDIT: Voici le code pour une connexion view controller:
Et une capture d'écran de la séquence des propriétés qui je parle:
swift 3.x
Assurez-vous que vous êtes l'exécution de l'effectuer des enchaînements visible-vue-contrôleur.
C'est un cas limite, mais mon réaliser des enchaînements en a échoué lorsque j'ai tenté de l'exécuter sur le point de vue du contrôleur appartenant à mon UIPageViewController qui n'est pas actuellement visible. Il a également omis si j'ai essayé de faire la transition sur tous les contrôleurs de vue appartenant à mon UIPageViewController, y compris le point de vue du contrôleur actuellement visibles. La solution était de piste qui view controller est actuellement visible dans mon UIPageViewController, et seulement effectuer la séquence sur ce point de vue-contrôleur.
Un exemple dans un compte de connexion. Quand vous avez du succès dans votre connexion après avoir cliqué sur un bouton (Action), vous pouvez utiliser:
Mais si vous êtes le lancement de l'app et vous avez obtenu les informations d'identification de votre trousseau de clés, vous devez utiliser cela comme une partie de la théard: