Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:在AppDelegate中设置标签文本_Ios_Swift_Null_Label_Appdelegate - Fatal编程技术网

Ios Swift:在AppDelegate中设置标签文本

Ios Swift:在AppDelegate中设置标签文本,ios,swift,null,label,appdelegate,Ios,Swift,Null,Label,Appdelegate,我有一个包含两个标签的视图控制器。我想从AppDelegate设置这些标签的值。我得到一个崩溃,当我调试它时,我发现标签是零。 以下是我在AppDelegate中调用视图控制器的方式: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { self.storyboard = UIStory

我有一个包含两个标签的视图控制器。我想从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中调用了主视图,所以我有这个问题吗


请帮助

UILabel更改标签插座的类型
UILabel?


在显示控制器之前,不会创建插座。因此,
UILabel
将产生
可选展开值失败

UILabel更改标签出口的类型
UILabel?


在显示控制器之前,不会创建插座。因此,
UILabel将生成
可选展开值失败

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

在您的
家庭视图控制器中

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

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

在您的
家庭视图控制器中

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值集时,如果标签不是nil,它将自动更新标签。除此之外,如果在启动outlet之前在app delegate中设置networkTypeText的值,则将在viewDidLoad中设置该值

在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,它将自动更新标签。除此之外,如果在启动outlet之前在app delegate中设置networkTypeText的值,则将在viewDidLoad中设置该值

谢谢你的回答。除了您的建议之外,我还在标签中添加了
self.homeViewController.labelNetworkType?.text=“WIFI”
,它可以正常工作。但我还有一个问题:标签上没有新的文字。它具有我在故事板中设置的值。我是否错过了另一个想法?设置文本时,视图控制器还不存在。您应该在
viewdiload
方法中调用
checkForReachability
,以便在第一次显示时获得正确的值我如何才能做到这一点?因为我在AppDelegate文件中调用它,所以将最后一个结果存储在AppDelegate的一个属性中,并在giewdidaod方法中获取该值。谢谢您的回答。除了您的建议之外,我还在标签中添加了
self.homeViewController.labelNetworkType?.text=“WIFI”
,它可以正常工作。但我还有一个问题:标签上没有新的文字。它具有我在故事板中设置的值。我是否错过了另一个想法?设置文本时,视图控制器还不存在。您应该在
viewdiload
方法中调用
checkForReachability
,以便在第一次显示时获得正确的值我如何才能做到这一点?因为我在AppDelegate文件中调用它,所以将最后一个结果存储在AppDelegate的一个属性中,并在giewdidlaod方法中获取该值。您能解释更多吗?谢谢,但我测试了它,问题总是在这里。你能看看我在@bobby的回答中的评论吗?你是否试图在
didSet
代码中加入断点,看看它是否在
checkForReachability
中的代码后被调用?
networkTypeText
具有我在AppDelegate“WIFI”中设置的值但是标签没有设置是的,它被调用了,但是标签是零,
networkTypeText
有“WIFI”,你能解释更多吗?谢谢,但是我测试了它,问题总是在这里。你能看看我在@bobby的回答中的评论吗?你是否试图在
didSet
代码中加入断点,看看它是否在
checkForReachability
中的代码后被调用?
networkTypeText
具有我在AppDelegate“WIFI”中设置的值但是标签没有设置是的,它被调用了,但是标签是零,并且在测试代码后,
networkTypeText
有“WIFI”,标签不是零,但始终是显示的默认值测试代码后,标签不是零,但始终是显示的默认值