Ios Swift:在AppDelegate中设置标签文本
我有一个包含两个标签的视图控制器。我想从AppDelegate设置这些标签的值。我得到一个崩溃,当我调试它时,我发现标签是零。 以下是我在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
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”,标签不是零,但始终是显示的默认值测试代码后,标签不是零,但始终是显示的默认值