【问题标题】:Pass array between View Controllers在视图控制器之间传递数组
【发布时间】:2017-01-30 00:27:20
【问题描述】:

试图在视图控制器之间传递一个数组。我不知道为什么很确定数组中有东西,但当它到达另一边时,它似乎是空的。没有错误...只是空的。

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      if segue.identifier == "segueMapSelection" {

           if let destinaton = segue.destination as? MapTableChoiceViewController {
                //destinaton.maps = sender as? [SkiMap]
                print("size of array before passing it through: ", maps.count)
                destinaton.maps = self.maps
           }
      }
     }

     @IBAction func SelectDifferentMapButton(_ sender: Any, forEvent event: UIEvent) {
          performSegue(withIdentifier: "segueMapSelection", sender: self.maps)


     }

在接收 ViewController 时,我有一个

var maps : [ObjectTypeHere]! = []

知道我在这里做什么吗?我已经将代码注释掉了我尝试过的另一种方式。当我尝试它时它给出了一个错误。

感谢您的帮助。

【问题讨论】:

  • var 映射:[ObjectTypeHere]!只有这个在你的第二个视图控制器中
  • 好的...所以我这样做了,它可能向我展示了问题。它现在说:致命错误:在展开可选值时意外发现 nil
  • 好的,数组有相同的类型吗?你的第二个视图控制器数组是 ObjectTypeHere 也许你是为这个例子做的,但我还是问
  • 将此 segue.destination 更改为? MapTableChoiceViewController 到这个:segue.destination 为! MapTableChoiceViewController 我觉得有问题
  • 或者干脆做: (segue.destination as!MapTableChoiceViewController).maps = self.maps 只检查转场名称后的那一行

标签: arrays swift swift3


【解决方案1】:

这个问题与视图控制器生命周期中的事情顺序有关。

  • self.maps 在源 VC 中的某个点收集
  • segue 开始,到达 prepare(for segue:),将 self.maps 传递给目标 VC
  • 只有这样目标控制器 (MapTableChoiceViewController) 才会执行 viewDidLoad,从而(重新)初始化数组

因此,如果您将数组声明为:

var maps:[ObjectTypeHere]!

您应该已经成功传递了数组 - 当然,假设 self.mapsdesignation.maps 之间的对象类型相同。

有关事件序列的完整定义,here's 详细说明。

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多