我无法从表格视图单元格中访问swift中的可选字符串。每个单元格都有一个标题标签和一个详细文本标签,表格视图中任何给定时间的单元格数量取决于用户(表格视图用于显示保存的值)。由于在每个单元格中保存为详细文本标签文本的字符串太长而无法在表格视图中读取,因此我希望将它们加载到按下单元格时所引用的另一个视图中。这是我对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”,但我得到了同样的错误。任何帮助表示赞赏
答案 0 :(得分:5)
您不应该从视图中提取数据。您应该从模型中提取数据。您拥有带有单元格的tableView这一事实意味着您拥有这些单元格中的数据模型。它可能是一个字符串数组或其他什么。不要试图从单元格中提取数据,只需从用于填充单元格的数据模型中获取数据。类似的东西:
let selectedIndexPath = tableView.indexPathForSelectedRow()
let selectedData = data[selectedIndexPath.row]
答案 1 :(得分:2)
您的问题不是unwrapped
,而是transfer.infoText.text
。 IBOutlets
时未设置prepareForSegue
。var
。您需要将属性(unwrapped
)添加到目标视图控制器以保存viewDidLoad
值。然后在IBOutlet
设置{{1}}时,将字符串复制到文本字段。