我是 swift 的初学者,正在从事一个使用 collectionView 的项目。从 collectionView 中,我想将一些值传输到详细信息 View ,但出现上述错误。值不是 nil 但不知何故,它在执行 segue 时给出了这个错误。任何人都可以帮助我,我被困在这里。
//In my CollectionView Controller.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "DetailsView")
{
if let vc:DetailsViewController = segue.destinationViewController as? DetailsViewController
{
vc.details.text = self.description
vc.line.text = self.subText
vc.startTime.text = self.formatted_time
}
}
}
//DetailsViewController
import UIKit
class DetailsViewController: UIViewController {
@IBOutlet var startTime: UILabel!
@IBOutlet var line: UILabel!
@IBOutlet var details: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
最佳答案
这基本上意味着您的 IBOutlets
尚未初始化。
您应该设置字符串,然后在 viewDidLoad
中设置标签。
总结一下:
- 在
DetailsViewController
中添加字符串属性 - 在您的
preparForsegue
函数中设置这些字符串属性 - 在
DetailsViewController
的viewDidLoad
中,设置标签
您的代码应如下所示:
//In my CollectionView Controller.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "DetailsView")
{
if let vc:DetailsViewController = segue.destinationViewController as? DetailsViewController
{
vc.detailsString = self.description
vc.lineString = self.subText
vc.startTimeString = self.formatted_time
}
}
}
//DetailsViewController
import UIKit
class DetailsViewController: UIViewController {
@IBOutlet var startTime: UILabel!
@IBOutlet var line: UILabel!
@IBOutlet var details: UILabel!
var startTimeString: String?
var lineString: String?
var detailsString: String?
override func viewDidLoad() {
super.viewDidLoad()
startTime.text = tmpStartTimeString
line.text = tmpLineString
details.text = tmpDetailsString
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
仔细检查我的代码,我写得很快 ;)
关于swift - 在展开可选值 prepareForSegue 时意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38819950/