【问题标题】:Xcode - Label outlet is nil in tab bar item viewsXcode - 标签栏项目视图中的标签出口为零
【发布时间】:2015-01-28 23:53:33
【问题描述】:

我有一个拆分视图控制器,表格视图的单元格有一个标签栏的 segue,它的视图控制器有一个 segue

问题是我给destinationViewController传数据的时候,数据传成功了,但是这个view里面的label outlet是nil。

这是 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 时(通过单击表格单元格),我都会得到 nil。但是,如果我创建一个在该视图中设置 lblName 的按钮,它就可以工作。

我做错了什么?

【问题讨论】:

    标签: xcode uitableview segue uitabbar


    【解决方案1】:

    这很尴尬,在花了一整天试图弄清楚这一点之后,我似乎在视图初始化之前调用了 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()
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多