Swift:在AppDelegate中设置标签文本

时间:2016-09-22 09:41:08

标签: ios swift null label 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中的主视图?

请帮忙

4 个答案:

答案 0 :(得分:3)

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

在显示控制器之前,不会创建插座。因此optional unwrapping value failed将生成$tags = implode('|', $tagsArray); $noTags = preg_replace('/\#(' . $tags . ')\b/i', '', $instagramText);

答案 1 :(得分:2)

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

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

并在viewDidLoad中这样做:

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

如果你这样做,第一次加载视图控制器时它将具有默认值。每当您触发一组networkTypeText值时,如果标签不是nil,它将自动更新标签。除此之外,如果在启动插座之前在app delegate中设置networkTypeText的值,它将在viewDidLoad中设置。

答案 2 :(得分:1)

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

homeViewController

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

答案 3 :(得分:-2)

标签声明应在AppDelegate中完成。 UIViewController中的初始化标签。完美的例子是this blog