我在从其他班级调用该功能时遇到了麻烦。我有这个:
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
答案 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的文本设置为此属性