【问题标题】:Swift how to use container view and segmented controlSwift如何使用容器视图和分段控制
【发布时间】:2017-11-04 10:05:34
【问题描述】:

我在使用容器视图和分段控制来实现切换视图时遇到问题。我在一个视图控制器中放置了两个容器视图,并且每个容器视图都嵌入了一个新视图(三个视图控制器在同一个 UIViewController 中)。

这是我的代码

import UIKit
import Charts

class ReportViewController: UIViewController {

@IBOutlet weak var containerTwoWeeks: UIView!
@IBOutlet weak var containerToday: UIView! 

@IBOutlet weak var segUi: UISegmentedControl!
@IBOutlet weak var resultLabel: UILabel!

@IBOutlet weak var paymentPie: PieChartView!
@IBOutlet weak var incomePie: PieChartView!

override func viewDidLoad() {
    super.viewDidLoad()
//        pieChartUpdate()
//        selectResultData()
}

@IBAction func segChange(_ sender: UISegmentedControl) {
    switch segUi.selectedSegmentIndex {
    case 0:
        self.containerTwoWeeks.isHidden = false
        self.containerToday.isHidden = true
        break
    case 1:
        self.containerTwoWeeks.isHidden = true
        self.containerToday.isHidden = false
        break
    default:
        break
    }
}

func selectResultData() {
    resultLabel.attributedText = reportService.selectResultData()
}

func pieChartUpdate () {
    (too much code here, ignore it)
}

}

一切正常,直到我在 vieDidLoad() 中调用了 pieChartUpdate() 或 selectResultData() 方法,错误信息如下

“线程 1:致命错误:在展开可选值时意外发现 nil”

我不用调用pieChartUpdate()或者selectResultData()方法就可以切换视图,所以很想知道原因和解决方法。希望有人能解决这个问题,谢谢。

【问题讨论】:

  • resultLabel 可能是nil
  • 但是在我想分段切换视图之前图表运行良好,resultLabel中有数据并且图表出来了,不知道使用两个容器视图是否有冲突?
  • 我尝试了resultLabel.text = "abc",但还是出现了同样的错误,听起来我不能使用resultLabel?
  • 因为是nil,比如你没有连接插座。

标签: ios swift


【解决方案1】:

您遇到了非常常见的错误和错误。不过不用担心。

检查您的完整错误消息。必须知道您尝试访问什么变量并获得 nil(可能是 resultLabel)。

然后确保该变量的故事板和视图控制器之间的连接是正确的。如果您没有发现问题,您可以尝试删除并重新创建它。

如果您需要更多帮助,请向我们显示完整的错误消息。

【讨论】:

  • 谢谢大佬,我想我找到了问题,我在同一个viewController的storyboard中定义了三个视图,所以在唯一的viewController中我无法连接任何元素的出口(为什么?),我将三个视图分成三个控制器,然后它工作了,谢谢。
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
相关资源
最近更新 更多