Swift: 在AppDelegate中设置标签文本

Swift: Setting label text in the AppDelegate

我有一个包含两个标签的视图控制器。我想从 AppDelegate 设置这些标签的值。我崩溃了,当我调试它时,我发现标签为零。 这就是我在 AppDelegate 中调用视图控制器的方式:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
     self.storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
     self.homeViewController = self.storyboard.instantiateViewControllerWithIdentifier("homeViewController") as! HomeViewController
     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(checkForReachability), name: ReachabilityChangedNotification, object: nil)}

checkForReachability 中我设置了标签文本。例如:

self.homeViewController.labelNetworkType.text = "WIFI";

我已经确认标签已连接到视图控制器。 我该如何解决?我有这个问题是因为我的应用程序是单视图应用程序并且我记得 AppDelegate 中的主视图吗?

请帮忙

将标签 Outlet 的类型从 UILabel! 更改为 UILabel?

在您的控制器出现之前,不会创建插座。所以 UILabel! 会产生 optional unwrapping value failed

不要试图在它们出现之前更改视图控制器出口值,而是创建一个变量来存储它,并将其设置在出口的 didSetviewDidLoad

在你的homeViewController中:

var networkTypeText = "" {
   didSet {
      labelNetworkType.text = networkTypeText
   }
}

在你的 homeViewController 中添加这样的东西。

var networkTypeText: String = "Default value" {
    didSet {
        if let networkType = labelNetworkType {
            networkType.text = networkTypeText
        }
    }
}

在 viewDidLoad 中这样做:

override func viewDidLoad() {
    super.viewDidLoad()
    labelNetworkType!.text = networkTypeText
}

如果你这样做,当你第一次加载你的视图控制器时,它将有默认值。每次当您触发一组 networkTypeText 值时,如果标签不为零,它将自动更新标签。除此之外,如果您在启动出口之前在应用程序委托中设置了 networkTypeText 的值,它将在 viewDidLoad 中设置。