从另一个类调用函数时出现致命错误
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