从另一个类调用函数时出现致命错误

时间:2015-08-14 10:48:01

标签: ios xcode swift

我在从其他班级调用该功能时遇到了麻烦。我有这个:

class ViewController: UIViewController {

    func addToOrder(orderNumber:String) {

        orderCount.text = orderNumber

    }

}

现在在我的另一堂课:

class TableViewController: UITableViewController {

   func addToOrder(button: UIButton) {


      ViewController().addToOrder("100")

      //I also tried

       var menu = ViewController()
       menu.addToOrder("100")

     }

}

我在这一行收到错误

    orderCount.text = orderNumber

出现此错误:

  

致命错误:在解包可选值时意外发现nil

2 个答案:

答案 0 :(得分:1)

您可以使用NSNotificationCenter

请按照以下步骤操作:

首先在你想要更新文本的第一个viewController中添加它:

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshTable:", name: "refresh", object: nil)

}

当您加载第一个视图时,会添加一个观察者,并添加此辅助方法,当您返回此视图时将调用该方法:

func refreshTable(notification: NSNotification) {
    let orderDetail = NSUserDefaults.standardUserDefaults().integerForKey("order")  //this will read your integer which you will save on second view.
    orderCount.text = "\(orderDetail)"

}

在您的下一个视图中,当您返回上一个视图时添加此代码。

@IBAction func goBack(sender: AnyObject) {
    //store your int here
    NSUserDefaults.standardUserDefaults().setInteger(100, forKey: "order")
    //send notification to first view.
    NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: nil, userInfo: nil)
    self.dismissViewControllerAnimated(true, completion: nil)
}

希望这会有所帮助。

答案 1 :(得分:0)

它是orderCount(可能是UILabel),在初始化时是nil。如果这是在故事板中创建的IBOutlet,则需要将文本存储为单独的属性,并在“viewDidLoad”方法中将Label的文本设置为此属性