致命错误:意外地发现零,而展开一个可选值解析注册

问题描述:

我试图做一个注册页面,但由于某种原因,我不断收到同样的错误“致命错误:意外地发现零,同时解包可选值”当我在模拟器中测试它时,“let username = self.usernameField.text”这一行。我知道错误有事情做一个值是零,但是无法弄清楚如何解决它,请帮助:(致命错误:意外地发现零,而展开一个可选值解析注册

代码=

@IBOutlet weak var emailField: UITextField? 
@IBOutlet weak var usernameField: UITextField? 
@IBOutlet weak var passwordField: UITextField? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBAction func signUpAction(sender: AnyObject) { 

    let username = self.usernameField!.text 
    let password = self.passwordField!.text 
    let email = self.emailField!.text 
    let finalEmail = email!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

    // Validate the text fields 
    if username?.characters.count < 5 { 
     let alert = UIAlertView(title: "Invalid", message: "Username must be greater than 5 characters", delegate: self, cancelButtonTitle: "OK") 
     alert.show() 

    } else if password?.characters.count < 8 { 
     let alert = UIAlertView(title: "Invalid", message: "Password must be greater than 8 characters", delegate: self, cancelButtonTitle: "OK") 
     alert.show() 

    } else if email?.characters.count < 8 { 
     let alert = UIAlertView(title: "Invalid", message: "Please enter a valid email address", delegate: self, cancelButtonTitle: "OK") 
     alert.show() 

    } else { 
     // Run a spinner to show a task in progress 
     let spinner: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(0, 0, 150, 150)) as UIActivityIndicatorView 
     spinner.startAnimating() 

     let newUser = PFUser() 

     newUser.username = username 
     newUser.password = password 
     newUser.email = finalEmail 

     // Sign up the user asynchronously 
     newUser.signUpInBackgroundWithBlock({ (succeed, error) -> Void in 

      // Stop the spinner 
      spinner.stopAnimating() 
      if ((error) != nil) { 
       let alert = UIAlertView(title: "Error", message: "\(error)", delegate: self, cancelButtonTitle: "OK") 
       alert.show() 

      } else { 
       let alert = UIAlertView(title: "Success", message: "Signed Up", delegate: self, cancelButtonTitle: "OK") 
       alert.show() 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 
        let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("Home") 
        self.presentViewController(viewController, animated: true, completion: nil) 
       }) 
      } 
     }) 
+0

您的网点是否连线? “@IBOutlet usernameField”旁边的小圆圈是否填满?如果它是空心的,则从该圈子拖动到Storyboard中的用户名字段。 – vacawama

+0

可能重复的[致命错误:意外地发现零,而解包可选值](http://*.com/questions/24643522/fatal-error-unexpectedly-found-nil-while-unwrapping-an-optional-values) – GoZoner

尝试......

import Foundation 
import Parse 
import UIKit 


class LoginViewController: UIViewController { 


@IBOutlet weak var userNameTF: UITextField! 
@IBOutlet weak var passWordTF: UITextField! 
@IBOutlet weak var emailTF: UITextField! 



override func viewDidLoad() { 
    super.viewDidLoad() 
} 

@IBAction func SignUp(sender: AnyObject) { 

    signUp() 
} 

@IBAction func Login(sender: AnyObject) { 
    login() 
} 

func signUp() { 

    let user = PFUser() 
    user.username = userNameTF.text 
    user.password = passWordTF.text 
    user.email = emailTF.text 

    // other fields can be set if you want to save more information 
    // user["phone"] = "650-555-0000" 

    user.signUpInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in 
     if error == nil { 
      print("Sign Up Succesful") 
     } else { 
      print("Sign Up Failed") 
     } 
    } 

} 

func login() { 
    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()) { 
      var Storyboard = UIStoryboard(name: "Main", bundle: nil) 
      var AfterLoginVC: UIViewController = Storyboard.instantiateViewControllerWithIdentifier("AfterLoginVC") as! UINavigationController 
       self.presentViewController(AfterLoginVC, animated: true, completion: nil) 
      } 

     } else { 
     print("Login Error, check credentials") 
     } 

    }) 

} 

} 

“AterLoginVC”是在成功尝试登录后想要实例化的视图控制器的故事板标识符,然后可以添加if/else语句来评估条件并将错误返回给用户