我有一个包含两个标签的视图控制器。我想从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中的主视图?
请帮忙
答案 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)
请勿尝试在视图控制器出口值出现之前更改它们,而是创建一个变量来存储它,并将其设置在您的插座中didSet
或viewDidLoad
在homeViewController
:
var networkTypeText = "" {
didSet {
labelNetworkType.text = networkTypeText
}
}
答案 3 :(得分:-2)
标签声明应在AppDelegate
中完成。 UIViewController
中的初始化标签。完美的例子是this blog。