【问题标题】:Updating date within bar button Item更新条形按钮项目中的日期
【发布时间】:2018-07-15 23:53:35
【问题描述】:

所以我有一个带有 tableView 和 detailView 的 splitViewController。我想要的是在detailView中有一个按钮,当按下时,将两周添加到tableView(masterview)中的条形按钮项。我有所有的 segues 工作和设置,但每当我运行它时,都是可选的

这是在 detailView 中运行的 segue

 var textMC = MasterViewController()

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if ((segue.destination as? UISplitViewController) != nil) {
        textMC.sim()
    }

然后在masterView内

    func sim() {
    let previousDate = dateLabel.title
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MM/dd/yy"
    let previousDateFormated : Date? = dateFormatter.date(from: previousDate!)
    let date = Calendar.current.date(byAdding: .day, value: 14, to: (previousDateFormated)! )
    let stringDate = dateFormatter.string(from: date!)
    dateLabel.title = stringDate
}



override func viewDidLoad() {
    super.viewDidLoad()

    let date = Date(timeIntervalSinceReferenceDate: 632880000)
    let formatter = DateFormatter()
    formatter.dateFormat = "MM/dd/yy"
    let result = formatter.string(from: date)
    dateLabel.title = result

update()

}

viewDidLoad 函数确实使初始 dateLabel.title 成为正确的日期并且 sim 函数确实运行,但它的方法返回错误“在展开可选值时意外发现 nil”,指的是 dateLabel.title。我不明白为什么它为零以及如何解决这个问题。是因为虽然我有一个 dateLabel.title 但实际的 dateLabel 是 nil 吗?请告诉我如何解决这个问题。谢谢

【问题讨论】:

  • 我看不到任何代码将实际的MasterViewController 设置为属性textMC。效果如何?
  • var textMC = MasterViewController() 这个?
  • 该代码实例化了一个完全无用的空MasterViewController。您最好将其声明为var textMC: MasterViewController?,而不是实例化这种无用的东西。如果除该行之外没有其他代码,则在未设置所有 IBOutlets 的空 MasterViewController 上调用 sim(),从而导致“意外发现 nil”崩溃。
  • 请显示您的代码以转换到您的详细视图控制器,您可能需要对其进行修改。

标签: swift date segue optional uisplitviewcontroller


【解决方案1】:

这一行:

 var textMC = MasterViewController()

错了。这将创建一个全新的 MasterViewController() 实例,绝对没有视图内容。你永远不应该那样做。

相反,将当前视图控制器中的转场添加到情节提要中MasterViewController 的场景中,给它一个标识符,然后使用

performSegue(withIdentifier: "yourMasterVCIdentifierHere")

然后像这样实现 prepareForSegue :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let dest = segue.destination as? MasterViewController {
       textMC
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多