2014-09-13 126 views
2

我无法从表格视图单元格中快速访问可选的字符串。每个单元格都有一个标题标签以及一个详细文本标签,并且表格视图中任意给定时间的单元格数量取决于用户(表格视图用于显示保存的值)。由于在每个单元格中保存为详细文本标签文本的字符串太长而无法在表格视图中读取,因此我希望在另一个视图中加载它们,以便在单元格被按下时查找。这是我赛格瑞方法准备:在Swift中访问表格视图单元格中的数据

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 =展开”和Xcode的告诉我,它发现无解包的时可选的。在我的调试过程中,我试过“println(cell?.textLabel?.text!)”,Xcode打印出“Optional(String)”,其中“String”是我试图访问的实际字符串,在正确的轨道上,但显然有我失踪的东西。我也尝试过“cell?.textLabel?.text”,但是我得到了同样的错误。任何帮助表示赞赏

回答

2

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

5

你不应该从视图中提取数据。你应该从模型中提取数据。事实上,你有一个单元格tableView意味着你有一个模型的数据进入这些单元格。它可能是一串字符串或其他。不要尝试从单元中提取数据,只需从您用来填充单元的数据模型中获取数据。喜欢的东西:

let selectedIndexPath = tableView.indexPathForSelectedRow() 
let selectedData = data[selectedIndexPath.row] 
相关问题