Je suis nouveau sur Xcode et je construis un projet avec un bouton de connexion. Après avoir cliqué sur la connexion avec les détails dans le champ de texte, il sera redirigé vers la deuxième vue qui est le contrôleur de vue de défilement. Cependant, j'ai deux parties de "Error" qui est

Normalement, il fonctionne avec un contrôleur de vue normal (connectez-vous et passez à la deuxième vue). Je viens de recréer un contrôleur de vue sur un contrôleur de vue de défilement et cela n'a pas fonctionné.

Au fait, j'ai eu un succès de construction mais je viens de recevoir une erreur lorsque j'essaye de "me connecter"

Quelqu'un peut-il expliquer pourquoi j'ai eu l'erreur de thread et l'erreur fatale? Comment puis-je résoudre le problème?

Contrôleur de vue de connexion

 @IBAction func LoginBtn(sender: AnyObject) {
     LoginIn()
 }

 func LoginIn(){
    let user = PFUser()
    user.username = usernameTF.text!
    user.password = passwordTF.text!

    PFUser.logInWithUsernameInBackground(usernameTF.text!,
    password:passwordTF.text! , block: { (User: PFUser?,  Error 
    :NSError? ) -> Void in

        if Error == nil{
            dispatch_async(dispatch_get_main_queue()){

                let Storyboard = UIStoryboard(name: "Main", bundle: nil)
                let MainVC : UIViewController = Storyboard.instantiateViewControllerWithIdentifier("scrollV") as UIViewController

                self.presentViewController(MainVC, animated: true, completion: nil)

            }
        }
        else{
            NSLog("Wrong!!!!")
        }
    })
}

Contrôleur d'affichage de défilement

import UIKit

class ScrollViewController: UIViewController {


@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()


    let V1 : ScrollViewController = ScrollViewController(nibName: "ScrollViewController", bundle: nil)
    self.addChildViewController(V1)
    self.scrollView!.addSubview(V1.view!)
    V1.didMoveToParentViewController(self)
}
3
yoadle 28 déc. 2015 à 22:46

2 réponses

Meilleure réponse

Vous effectuez un déballage forcé, ce qui n'est pas recommandé (en général, les opérations forcées dans Swift ne sont pas recommandées), et cela plantera votre application si la variable en cours de déballage est nil. C'est pourquoi le déballage forcé n'est recommandé que lorsque vous êtes sûr à 100% que vous avez une valeur valide dans votre option.

Dans votre cas, il semble que V1.view! provoque le plantage, et cela peut être dû au fait que V1 n'a pas été chargé avec succès depuis la pointe.

Swift a rendu très facile le travail avec des valeurs Nullable. Ne forcez pas le déballage et utilisez liaison facultative à la place.

3
Cristik 28 déc. 2015 à 21:55

@Cristik a raison. Au lieu de forcer le déballage de la variable, vous devriez vérifier si elle est instanciée à l'aide de l'instruction "if let":

if let scrollView = self.scrollView {
     if let subView = V1.view {
          scrollView.addSubview(subView)
     }
}
3
lehn0058 28 déc. 2015 à 19:59