Swift:致命错误:意外发现nil和EXC_BAD_INSTRUCTION

时间:2015-12-28 19:46:10

标签: ios swift

我是Xcode的新手,我正在使用登录按钮构建项目。在文本字段中单击具有详细信息的登录后,它将重定向到第二个视图,即滚动视图控制器。但是,我得到了“错误”which is

的两个部分

通常,它适用于普通视图控制器(登录并移动到第二个视图)。我刚刚为滚动视图控制器重新创建了一个视图控制器,但它没有用。

顺便说一句,我获得了成功,但当我尝试“登录”

时我才遇到错误

任何人都可以解释为什么我得到线程错误和致命错误? 我该如何解决这个问题?

登录视图控制器

 @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!!!!")
        }
    })
}

滚动视图控制器

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)
}

2 个答案:

答案 0 :(得分:3)

你正在做一些强制解包,这是不推荐的(一般不推荐使用Swift中的强制内容),如果要解包的变量是nil,它会使你的应用程序崩溃。这就是为什么只有当你100%确定你的可选值中有一个有效值时才推荐强制解包。

在您的情况下,似乎V1.view!导致崩溃,这可能是由于V1没有从笔尖成功加载的事实引起的。

Swift使得使用可空值很容易。只是不要强制打开并使用optional binding代替。

答案 1 :(得分:3)

@Cristik是对的。而不是强制解包变量,你应该检查它是否使用“if let”语句进行实例化:

if let scrollView = self.scrollView {
     if let subView = V1.view {
          scrollView.addSubview(subView)
     }
}