Ios 将显示“使用视图创建主视图计数器”
我需要创建一个主视图计数器,每当我从不同的视图返回到主视图时,它都会计数。 我已将计数器放入VIEWWILLEXPENCE方法。只要切换到使用SecondViewController实现的第二个视图,就可以正常工作 如果我想切换到第二个情节提要视图,该视图由同一个ViewController控制,则会发生错误。 隐式展开可选值时意外发现nil “显示第二个情节提要视图”按钮将连接主视图和第二个情节提要视图,该按钮仅在Main.storyboard上创建(ViewController上未编写任何代码) 我只编程了第二个情节提要的关闭功能Ios 将显示“使用视图创建主视图计数器”,ios,swift,Ios,Swift,我需要创建一个主视图计数器,每当我从不同的视图返回到主视图时,它都会计数。 我已将计数器放入VIEWWILLEXPENCE方法。只要切换到使用SecondViewController实现的第二个视图,就可以正常工作 如果我想切换到第二个情节提要视图,该视图由同一个ViewController控制,则会发生错误。 隐式展开可选值时意外发现nil “显示第二个情节提要视图”按钮将连接主视图和第二个情节提要视图,该按钮仅在Main.storyboard上创建(ViewController上未编写任何代
class ViewController: UIViewController {
let secondViewController = SecondViewController()
var appearanceCounter = 0
@IBOutlet weak var counterLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewWillAppear(_ animated: Bool) {
appearanceCounter += 1
counterLabel.text = String(appearanceCounter)
}
@IBAction func showSecondViewPressed(_ sender: UIButton) {
secondViewController.modalPresentationStyle = .fullScreen
secondViewController.modalTransitionStyle = .flipHorizontal
// present(secondViewController, animated: true, completion: nil)
show(secondViewController, sender: nil)
}
@IBAction func backWithSequeUwindPressed(unwindSegue: UIStoryboardSegue) {
self.modalTransitionStyle = .crossDissolve
}
@IBAction func backWithIBActionPressed(_ sender: UIButton) {
self.modalTransitionStyle = .crossDissolve
self.dismiss(animated: true, completion: nil)
}
}
计数器应处理这两种情况。当我从SecondView和SecondStoryboardView返回时,它应该会起作用。如何实现正确的计数器?我犯了什么错误?这里的问题是,黄色视图和蓝色视图由同一个控制器控制 创建蓝色标签时,界面生成器负责将计数器标签链接到附带代码中的变量。 对于黄色的,没有这样的标签,因此没有任何内容链接到
counterLabel
变量,因此当运行黄色的viewdide
时,为零。
由于IBOutlets是强制展开选项(请注意声明后的!),因此默认情况下,此访问会使应用程序崩溃
处理这种情况的正确方法是在interface builder中为对应的控制器实际使用两个不同的控制器。
另外一个选择,如果你不可能的话,将是交换代码>用于?
希望这能有所帮助:)我不明白您的控制器是如何链接的,哪些源于代码,哪些源于情节提要。也许在故事板上加一张图片是个好主意。@KlixxOne我添加了一个打印屏幕-我希望它能让它更清晰。谢谢你的帮助,这个错误到底发生在哪里?你能在代码中突出显示它吗?黄色和蓝色视图都由相同的视图控制器控制吗?我已经更新了图片-在那里你可以看到错误发生的地方。没错,它们都由同一个视图控制器控制。-我想这就是问题发生的原因,但我不知道如何解决它。然后接受答案,让其他人知道这个问题已经解决:-)