我从AppDelegate调用一个名为updateUI
的函数,该函数存在于另一个视图控制器中,但在调用该函数tableView.isHidden = true
后显示nil
如何更新视图以便反映变化。
的AppDelegate:
if (rootViewController?.isKind(of: MovieDetailsViewController.self))!
{
if notificationContentType == 1
{
movieDetailsVC.updateUI()
}
}
查看控制器:
if currentrentalType == 1
{
defaults.set("true", forKey: "isStillPlaying")
self.tableViewOutlet.isHidden = true
self.seekBarOutlet.isHidden = false
self.seekBarMaximumDurationLabelOutlet.text = self.convertTime(miliseconds: self.milisecondsForUpdateUI)
self.seekBarOutlet.maximumValue = Float(self.milisecondsForUpdateUI!)
let currentDate = NSDate()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd, HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(name: "IST") as TimeZone!
let date = dateFormatter.date(from: dateFormatter.string(from: currentDate as Date))
let currentDATE = date!.timeIntervalSince1970 * 1000
let movieStartDate = defaults.value(forKey: "MOVIE_START_DATE") as? Double
let difference = currentDATE - movieStartDate!
self.seekBarOutlet.setValue(Float(difference), animated: true)
let selectedValue = "\(Int(self.seekBarOutlet.value))"
let convertedValue = self.convertTime(miliseconds: Int(selectedValue)!)
self.seekBarMinimumDurationLabelOutlet.text = convertedValue
self.myTimer = Timer.scheduledTimer(timeInterval:1, target: self, selector: #selector(self.updateSlider), userInfo: nil, repeats: true)
}
我也试过了self.view.setNeedsDisplay()
但是错误显示在viewController的viewDidLoad()tableView.delegate = self
错误:在解开可选值时意外发现nil
答案 0 :(得分:0)
从App委托调用该函数时。控件直接进入该功能。 我认为tableViewOutlet和其他一些插座没有得到正确的定义。 (可能在viewdidload中定义,但未被调用) 代码不足以识别错误。
编辑:而不是从app delegate调用该函数。在UIViewController类和viewDidLoad上创建一个静态整数,检查该整数是否设置为1.如果是,则将其设置为0,然后在UI中执行所需的更改。
if (rootViewController?.isKind(of: MovieDetailsViewController.self))!
{
if notificationContentType == 1
{
ViewControllerName.STATICINT = 1
}
}
在VC中,在viewdidLoad中
if ViewControllerName.STATICINT == 1 {
//required changes
ViewControllerName.STATICINT = 0
}
答案 1 :(得分:0)
我希望你从storyboard创建了tableView的插座。崩溃的原因是,您在设置视图框架之前尝试访问tableview(任意)插座。
if (rootViewController?.isKind(of: MovieDetailsViewController.self))!
{
if notificationContentType == 1
{
print(movieDetailsVC.view.frame)
movieDetailsVC.updateUI()
}
}
尝试打印Controller视图框,这个语句实际上会加载视图并设置它的框架,所以你的插座也应该被实例化。这只是一个解决方法,我希望它有所帮助。