我试图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]
}
有几个问题:
您不能让源控制器尝试访问IBOutlet
目标的。在prepareForSegue
调用时,IB出口引用的控件尚未创建,因此viewOut
无疑仍然是nil
。
因此,而不是prepareForSegue
执行以下操作:
destVC.viewOut.text! = stringList[0] as String
相反,它应该只设置String
属性viewer
:
destVC.viewer = stringList[0]
然后viewDidLoad
目的地的会填充从被调用方调用的UITextField
控件:viewOut
String
viewer
viewOut.text = viewer
从代码示例中还不能完全清楚,但是似乎您可能同时拥有didSelectRowAtIndexPath
从单元格到目标视图控制器的方法和序列。(我猜这是因为我在这里看不到任何以编程方式启动segue的东西。)
如果是这样,那就是一个问题,因为segue可能在 didSelectRowAtIndexPath
被调用之前执行(即,您会看到prepareForSegue
被调用before didSelectRowAtIndexPath
)。要解决此问题,请从单元格到下一个场景删除序列,而要在两个场景本身之间保留序列。(也就是说,选择单元格时不会自动调用segue。)如果为该segue赋予了唯一的故事板ID,则可以通过以下方式以编程方式调用它didSelectRowAtIndexPath
:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let mySelectedCell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
if let tx = mySelectedCell.textLabel?.text as String? {
stringList.append(tx)
}
performSegueWithIdentifier("yourseguestoryboardidhere", sender: self)
}
这有点学术性(与手头的问题无关),但是您通常不应该从单元中检索要传递到下一个场景的文本。您确实应该回到模型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句