我是swift的初学者,正在开发一个我正在使用collectionView的项目。从collectionView,我想将一些值传输到详细信息视图,但我得到上面提到的错误。值不是零,但不知何故,它在执行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()
}
}
答案 0 :(得分:1)
这基本上意味着您的IBOutlets
尚未初始化。
您应该设置字符串,然后在viewDidLoad
设置标签。
总结一下:
DetailsViewController
preparForsegue
功能viewDidLoad
的{{1}}中,设置标签您的代码应如下所示:
DetailsViewController
仔细检查我的代码,我已经很快写完了;)
答案 1 :(得分:0)
目标视图控制器中的IBOutlets
不会设置,直到prepareForSegue
完成后的某个时间
在DetailsViewController
中,添加三个实例变量:
var startTime: String?
var line: String?
var details: String?
然后在prepareForSegue
中设置这三个值:
vc.details = self.description
vc.line = self.subText
vc.startTime = self.formatted_time
然后在viewDidLoad
的{{1}}
DetailsViewController
答案 2 :(得分:0)
正如上面的两个答案在您UIViewController
时创建prepareForSegue
的实例时指出segue.destinationViewController as? DetailsViewController
,这并不意味着@IBOutlet
}注入或初始化。视图完全加载时会初始化@IBOutlet
,因此您可以执行以下两个选项:
UIViewController
中创建变量,您可以在UIViewController
的{{1}}初始化之后保存值,然后在另一个prepareForSegue
viewDidLoad()
UIViewController
1}}您可以设置@IBOutlet
' s的值。view
的实例时调用let _ = vc.view
(例如UIViewController
)属性,这样就可以强制视图完全加载负载,你可以从@IBOutlet
。prepareForSegue
醇>
我希望这对你有所帮助。