如何关闭当前视图并重新加载另一个视图?

时间:2015-03-20 01:36:17

标签: ios swift uiviewcontroller

@IBAction func DoneButton(sender: AnyObject) {
    self.dismissViewControllerAnimated(true, completion: nil)
    let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as UIViewController
    viewController.viewWillAppear()
}

它假设要关闭我当前的视图并重新加载ViewController

但它崩溃了致命错误:意外

found nil while unwrapping an Optional value

是因为我以前解雇了吗?

2 个答案:

答案 0 :(得分:0)

instantiateViewControllerWithIdentifier()的调用会返回一个可选项。因此,如果在故事板中找不到具有指定标识符的视图控制器,则它将设置为nil,并且您调用viewWillAppear的下一行将崩溃。

实际上你也可能在viewWillAppear内崩溃。这不是应该调用的方法。相反,当您的视图控制器出现时,UIKit将为您调用该方法。

我想你要做的是这样的事情:

if let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as UIViewController {
    self.presentViewController(viewController,
        animated: true, completion: nil)
}

如果没有,请为您的问题提供更多背景信息。

答案 1 :(得分:0)

我想要做任何一次

1

    let viewController = ViewController()

    viewController.viewWillAppear(false)

2

在中学阶段:

    let viewController = ViewController()

    viewController.shouldRefresh = true

在小学班级:

var shouldRefresh: Bool!

override func viewWillAppear(animated: Bool) {

    if shouldRefresh == true {

    }
}

3

在中学阶段:

    let viewController = ViewController()

    viewController.reloadRoutineData()

在小学班级:

func reloadRoutineData() {

// Do my stuff here 
} 

第三个选项是我的变量,因为我只需要做某些代码,而不是真正重新加载视图。但是在打开时,所有这些都会以nil崩溃。