2016-09-22 101 views
0

我有一個包含兩個標籤的視圖控制器。我想從AppDelegate中設置這些標籤的值。我遇到了崩潰,當我調試它時,我發現標籤爲零。 這是我如何調用在AppDelegate的視圖控制器:Swift:在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中的主視圖?

請幫

回答

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值時,如果標籤不爲零,它將自動更新標籤。除此之外,如果您在啓動插座之前在應用程序委託中爲networkTypeText設置值,則它將在viewDidLoad中設置。

+0

在測試完你的測試後代碼,標籤不是零,但它始終是顯示的默認值 –

+0

哇感謝兄弟它的作品就像一個魅力... – Learner

3

改變,直到你的控制器給出,不創建出口您的標籤出口從UILabel!UILabel?

類型。所以UILabel!會產生optional unwrapping value failed

+0

謝謝你的回答。除了你的建議之外,我還在標籤中添加了'?':'self.homeViewController.labelNetworkType?.text =「WIFI」',它可以工作。但是我又遇到了另一個問題:標籤沒有得到新的文本。它具有我在故事板中設置的價值。我錯過了另一個想法? –

+0

設置文本時,視圖控制器尚不存在。您應該在'viewDidLoad'方法中調用'checkForReachability'以在第一次顯示時獲得正確的值 – CZ54

+0

我該怎麼做?因爲我在AppDelegate文件中調用 –

1

不要出現才改變視圖控制器出口值,而是做一個變量來存儲它,並將其設置在電源插座的didSetviewDidLoad

在你homeViewController

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

請您詳細解釋一下嗎? –

+0

謝謝,但我測試了它,問題總是在這裏。你能看看我在@bobby的回答中的評論嗎? –

+0

您是否嘗試在'didSet'代碼中放置斷點並查看它是否在'checkForReachability'中的代碼之後被調用? – Tj3n

相關問題