我正在尝试在textLabel
中检查的第一个单元格的tableView
中获取该名称,但我似乎无法将AnyObject
转换为一个字符串。我的错误说:
fatal error: unexpectedly found nil while unwrapping an Optional value
它出现在我的代码的最后一行。
var stringList = [String]()
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let mySelectedCell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
if (mySelectedCell.accessoryType == UITableViewCellAccessoryType.Checkmark) {
mySelectedCell.accessoryType = UITableViewCellAccessoryType.None
}
else {
mySelectedCell.accessoryType = UITableViewCellAccessoryType.Checkmark
mySelectedCell.tintColor = UIColor.blackColor()
if let tx = mySelectedCell.textLabel?.text as Optional{
stringList.append(tx)}
}
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var destVC: AddFriendViewController = segue.destinationViewController as AddFriendViewController
destVC.viewOut.text! = stringList[0] as String
}
任何关于如何进行的想法都将不胜感激。
编辑:目标VC的代码:
@IBOutlet weak var usernameLabel: UITextField!
@IBOutlet weak var viewOut: UITextField!
var viewer:String = String()
override func viewDidLoad() {
super.viewDidLoad()
viewOut.text = viewer
// Do any additional setup after loading the view.
}
编辑2:通过替换prepareForSegue
函数,我摆脱了错误,但标签仍然没有显示任何文字。
func friendAdded(){
var destVC: AddFriendViewController = AddFriendViewController()
destVC.viewer = stringList[0]
}
答案 0 :(得分:0)
有几个问题:
您无法让源控制器尝试访问目标的IBOutlet
。在调用prepareForSegue
时,IB网点引用的控件尚未创建,因此viewOut
无疑仍为nil
。
所以,不要让prepareForSegue
执行以下操作:
destVC.viewOut.text! = stringList[0] as String
它应该只设置String
属性,viewer
:
destVC.viewer = stringList[0]
然后目标的viewDidLoad
将填充UITextField
中名为viewOut
的名为String
的{{1}}控件:
viewer
您的代码示例并不完全清楚,但看起来您可能同时拥有viewOut.text = viewer
方法以及从单元格到目标视图控制器的segue。 (我猜这是因为我在这里没有看到任何以编程方式启动segue的内容。)
如果是这样,那就是一个问题,因为在调用 didSelectRowAtIndexPath
之前可能会执行(即你会在didSelectRowAtIndexPath
之前看到prepareForSegue
) 。要解决此问题,请将segue从单元格移除到下一个场景,而是在两个场景之间进行segue。 (即,当您选择单元格时,不会自动调用segue。)如果您为该segue提供唯一的故事板ID,则可以从didSelectRowAtIndexPath
以编程方式调用它:
didSelectRowAtIndexPath
这更具学术性(与手头的问题无关),但通常不应检索要从单元格传递到下一个场景的文本。你真的应该回到你的模特。