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

Posted

技术标签:

【中文标题】从另一个类调用函数时出现致命错误【英文标题】:fatal error on calling function from another class 【发布时间】:2015-08-14 10:48:01 【问题描述】:

我在从其他类调用函数时遇到问题。我有这个:

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

【问题讨论】:

MenuController() 是一个构造函数调用,所以MenuController().addToOrder("100") 每次都会创建一个新的 MenuController(),这是你想要的吗? 你正在实例化MenuController 的一个新实例,所以大概它的任何属性都不会被初始化 我已经更新了我的问题,我忘了把原来的类名 MenuController 改成 ViewController 【参考方案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)

希望这会有所帮助。

【讨论】:

【参考方案2】:

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

【讨论】:

是的,但是此时 ViewController().addToOrder("100")orderCount 仍然是 nil 因为您的视图尚未加载。如果你在这两个地方添加一些NSLog statments,你就会明白我的意思。 我在调用它的动作中做了ViewController().orderCount.text = "0"ViewController().addToOrder("100")。但还是一样

以上是关于从另一个类调用函数时出现致命错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2 - 调用“didDeselectItemAtIndexPath”时出现致命错误

使用 CreateThread 调用类函数时出现错误 C3867

调用类方法时出现“调用未定义函数”错误

当我尝试从 main 调用我的类模板函数时出现错误

致命错误:调用未定义的函数 imagewebp() [关闭]

PDO 致命错误:在非对象上调用成员函数 prepare()