从Swift中的表视图单元访问数据

我无法从表格视图单元格中访问swift中的可选字符串 . 每个单元格都有一个 Headers 标签和一个详细文本标签,表格视图中任何给定时间的单元格数量取决于用户(表格视图用于显示保存的值) . 由于在每个单元格中保存为详细文本标签文本的字符串太长而无法在表格视图中读取,因此我希望将它们加载到按下单元格时被引用的另一个视图中 . 这是我对segue方法的准备:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {


        if segue.identifier == "cellSegue"
        {

          let cell = tableView.cellForRowAtIndexPath(tableView.indexPathForSelectedRow()!)

          var transfer : ExplanationView = segue.destinationViewController as ExplanationView

          if let unwrapped = cell?.textLabel?.text!
          {

            transfer.infoText.text = unwrapped

          }


        }

   }

当执行segue时,我会遇到致命的崩溃,违规行是“transfer.infoText.text = unwrapped”,Xcode告诉我在打开可选项时发现nil . 在我的调试过程中,我尝试过“println(cell?.textLabel?.text!)”和Xcode打印“Optional(String)”,其中“String”是我试图访问的实际字符串,所以看起来像我我走在正确的轨道上,但显然有一些我不知道的东西 . 我也试过“cell?.textLabel?.text”,但我得到了同样的错误 . 任何帮助表示赞赏

回答(2)

3 years ago

你的问题不是 unwrapped 而是 transfer.infoText.text . 您的 IBOutlets 未在 prepareForSegue 时设置 . 您需要将属性( var )添加到目标视图控制器以保存 unwrapped 值 . 然后在 viewDidLoad 中设置 IBOutlet 时,将字符串复制到文本字段 .

3 years ago

您不应该从视图中提取数据 . 您应该从模型中提取数据 . 您拥有带有单元格的tableView这一事实意味着您拥有这些单元格中的数据模型 . 它可能是一个字符串数组或其他什么 . 不要试图从单元格中提取数据,只需从用于填充单元格的数据模型中获取数据 . 就像是:

let selectedIndexPath = tableView.indexPathForSelectedRow()
let selectedData = data[selectedIndexPath.row]