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

Posted

技术标签:

【中文标题】Xcode - 标签栏项目视图中的标签出口为零【英文标题】:Xcode - Label outlet is nil in tab bar item views 【发布时间】: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 的按钮,它就可以工作。

我做错了什么?

【问题讨论】:

【参考方案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()

【讨论】:

以上是关于Xcode - 标签栏项目视图中的标签出口为零的主要内容,如果未能解决你的问题,请参考以下文章

将数据从标签栏控制器传递到 swift 和 xcode 中的视图控制器

基于视图的应用程序中的标签栏 - XCode

基于视图的应用程序中的标签栏

使用新的 Xcode13+ 编译和运行我的 tvOS 项目,标签栏随 scrollView 滚动,我无法访问拆分视图控制器

没有 TabBarController 的标签栏 - 为情节提要中的标签栏项目添加视图控制器

标签栏和视图大小 xcode