我有一个拆分视图控制器,表视图的单元格有一个segue到一个标签栏,它有一个segue到它的视图控制器
问题是当我将数据传递给destinationViewController时,数据已成功传递,但此视图中的标签出口为零。
这是TableViewController中的prepareForSegue方法
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
println("segue happened")
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
if let indexPath = self.tableView.indexPathForSelectedRow() {
let patient = patients[indexPath.row]
let controller = (segue.destinationViewController as UITabBarController).viewControllers![0] as personalViewController
controller.patient = patient
}
}
这是personalViewController(第一个标签)
import UIKit
class personalViewController: UIViewController {
@IBOutlet weak var lblName: UILabel!
@IBAction func btnButton(sender: AnyObject) {
let temp = self.patient
self.patient = temp
}
var patient : Patient? {
didSet {
println("patient didSet")
self.setData()
}
}
[...]
func setData() {
println( self.lblName == nil ) // true when selecting an element in table view but false if I set data using btnButton button
println( self.patient!.name ) // always set correctly
if lblName != nil { // had to add this line to prevent crash
lblName.text = patient!.name
}
// The previous line crashes when using table view for navigation
// it does not crash when clicking a button (btnButton)
}
}
每当我在患者didSet
中使用插座lblName(通过单击表格单元格)时,我就会得到零。但是,如果我创建一个在该视图中设置lblName的按钮,它就可以工作。
我做错了什么?
答案 0 :(得分:0)
这是令人尴尬的,在花了一整天试图解决这个问题后,似乎我在视图初始化之前调用了setData方法。
而不是在患者属性的didSet中调用setData方法,而是应该在UIViewController的viewDidLoad方法中完成它
var patient : Patient?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
println( "Personal View Did Load");
setData()
}