2013-10-22 65 views
2

我遇到嚴重的問題讓我的導航控制器工作,並嘗試幾乎所有相關的問題在這個網站上。UINavigationController'損壞的導航欄'問題

我的問題是,當我以編程方式執行segue時,導航欄中似乎存在轉換,但視圖不會更改。我看到下面的錯誤,而不是:

2013-10-22 13:47:30.059 App[2236:a0b] nested push animation can result in corrupted navigation bar 
2013-10-22 13:47:30.411 App[2236:a0b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 
2013-10-22 13:47:30.501 App[2236:a0b] Unbalanced calls to begin/end appearance transitions for 

我的故事板是這樣的:

enter image description here

在LoginViewController我們基於某些條件執行賽格瑞:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear]; 
    NSString* appState = [AppConfig getAppState]; 
    if ([appState isEqualToString:APP_STATE_WAITING]) { 
     [self performSegueWithIdentifier:@"Load" sender:self]; 
    } 
    else if ([appState isEqualToString:APP_STATE_REGISTRATION_AVAILABLE]) { 
     [self performSegueWithIdentifier:@"SignUp" sender:self]; 
    } 
} 

在LoadingViewController我們在執行操作前等待Web服務響應:

- (void)segueToWaitingList:(NSUInteger)behind inFront:(NSUInteger)inFront 
{ 
    [MosaycOptions setAppState:APP_STATE_WAITING]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self performSegueWithIdentifier:@"Waiting" sender:self]; 
    }); 
} 

這就是讓我感到棘手的問題。導航欄的轉變,但認爲不和我們看到打印出來以下錯誤:

2013-10-22 13:47:30.059 App[2236:a0b] nested push animation can result in corrupted navigation bar 
2013-10-22 13:47:30.411 App[2236:a0b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 
2013-10-22 13:47:30.501 App[2236:a0b] Unbalanced calls to begin/end appearance transitions for 

的應用程序不會崩潰,但沒有發生SEGUE,它不會轉移到等待名單的看法,但僅僅停留在加載並打印錯誤到控制檯。當我按回到而不是移動回登錄屏幕出現以下空白屏幕:

enter image description here

如果我回來了它與此錯誤崩潰按:http://pastebin.com/7mCyeQv9

東西顯然是越來越亂了與導航堆棧,但我已經檢查它使用調試器,它看起來非常好,一切都被推到平常。我不能爲我的生活弄清楚。這只是我之前使用的標準導航控制器設置。

任何想法?

+0

爲什麼你使用dispatch_async(dispatch_get_main_queue(),^ {「in ** viewDidAppear **?** viewDidAppear **總是在主隊列中運行 – adnako

+0

好點,遺留在另一個位置。 – Michael

+0

您應該使用** viewDidAppear:(BOOL)animated **方法,而不是** viewDidAppear ** – adnako

回答

10

我終於想通了這個問題。

performSegueWithIdentifier之前調用viewDidAppear在LoadingViewController上被調用。基本同步錯誤。

+1

你是如何協調這一點的? –

+0

從我記得有一個競爭條件之間的網絡響應踢segue和viewDidAppear方法的過渡視圖被調用。我想我只有兩個布爾值,一個表示已收到響應,一個表示viewDidAppear已被調用,然後用它們來決定頂部是否啓用了繼續。 – Michael

3

您不應該在viewDidLoad中執行segue。 嘗試執行在viewDidApperar:

蘋果documentation

Displaying a View Controller’s Contents Programmatically … Present it from another visible view controller. …

+1

沒有幫助我害怕。 – Michael

+1

它應該工作。我有同樣的問題。 – adnako

+1

我把它移到viewDidAppear中,但得到同樣的問題。 – Michael