Xcode - 标签栏项目视图中的标签出口为零

时间:2015-01-28 23:53:34

标签: xcode uitableview segue uitabbar

我有一个拆分视图控制器,表视图的单元格有一个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的按钮,它就可以工作。

我做错了什么?

1 个答案:

答案 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()
}