2015-02-17 73 views
2

我有一個UITableViewController,我希望人們可以作爲主頁面訪問。我有一個登錄視圖控制器,但我不希望這是我的初始視圖控制器。我有一個if語句來檢查用戶是否先前登錄過。如果沒有,我想執行一個segue到登錄視圖控制器。然而,當我運行該應用程序時,它會通過if語句,識別出用戶== nil,然後進入performSegueWithIdentifier操作。performSegueWithIdentifier正在被跳過* SWIFT

override func viewDidLoad() { 
     super.viewDidLoad() 

     if user == nil { 

      self.performSegueWithIdentifier("LoginSegue", sender: self) 

     } 
} 

任何想法爲什麼?

+1

是否使用nsuserdefaults來存儲用戶憑據? – 2015-02-17 22:36:20

+0

也許嘗試'dispatch_async(dispatch_get_main_queue(),{self.performSegueWithIdentifier(「LoginSegue」,sender:self) })'也確保你的shouldPerformSegue沒有返回false。 – boidkan 2015-02-17 22:37:31

+0

Texas =不,我正在使用Parse。 – 2015-02-17 23:11:54

回答

6

您應該將代碼移動到viewWillAppearviewDidAppear方法中。 然後它應該正確使用。

但現在視圖閃爍很短的時間。要刪除閃爍,只是藏在你的viewWillApear方法的觀點:

self.view.hidden = true 

另外,viewDidLoad方法不會被調用每次的觀點出現,但只有第一次加載。例如,如果您執行一個segue並返回到視圖,它不會再次加載,但只能再次調用viewWillAppearviewDidAppear

+0

謝謝。我明白那個。我的煩惱是,在調用viewWillAppear或viewDidAppear時,主要TableVC出現一會兒,然後進入登錄屏幕。如果用戶爲零,我寧願進入登錄屏幕。任何方法來避免主要的VC的閃爍? – 2015-02-17 22:59:52

+0

我編輯了我的答案。只需在'viewWillApear'方法中添加'self.view.hidden = true'來解決這個問題。 – Christian 2015-02-17 23:06:15

+0

我懷疑我還沒有發現問題。當我爲代碼添加斷點時,我會看到它通過if語句,讀取perfromsegue函數,然後繼續瀏覽頁面,就好像perfromsegue函數甚至不在那裏一樣。無論該方法是在viewWillAppear還是viewDidAppear或viewDidLoad – 2015-02-17 23:13:43

1

沒有更多的信息很難說。

  1. 你有一個按鈕或者已經建立的segue的東西,並且你提供了segue的標識符嗎?我在viewDidLoad中做了一個類似的調用,它工作。

  2. 您是否將視圖控制器嵌入到UINavigationController中?如果不是的話,那麼執行這個segue是不可能的。這聽起來像你正在使用從UIViewController繼承的UITableViewController。所以這可能是問題。

1
​​

這段代碼解決了我的問題。 使用我的代碼,而不是 self.performSegueWithIdentifier(「LoginSegue」,發件人:個體經營) ,給你的目的地的ViewController像ViewControllerClassId

2

對於雨燕3.0的ID,嘗試這樣的主線程上運行。

DispatchQueue.main.async { 
    self.performSegue(withIdentifier: "LoginSegue", sender: self) 
}