2014-09-13 122 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] 
相關問題