2010-10-16 50 views
2

我有一個很奇怪的問題與UINavigationController的iPhone和我敲我的頭靠在這個牆上。的UINavigationController呈現空白視圖

它要點是我執行調用到服務器,並當呼叫失敗我換出與含有錯誤消息的視圖的當前視圖。有問題的代碼是通過使用performSelectorOnMainThread

稱爲主線程上會發生什麼事的做法是,在設備上它顯示大約有一半的時間在空白屏幕中。在模擬器上,每次都會顯示一個空白屏幕,導致我認爲這可能是由於模擬器中更好的處理速度而導致的更爲突出的某種時序問題。如果我通過點擊ui中的按鈕來顯示頁面來調用相同的函數,那麼這很好,因此我認爲它不是代碼本身的問題。

我覈實,我加入控制器在導航堆棧。驗證它在主線程中被調用,它是可見的,框架大小和位置是正確的。我試圖明確地設置視圖是可見的,將它移到父視圖的前面並調用setNeedsDisplay,甚至手動調用drawRect。這些都不起作用。

關於這裏會發生什麼的任何想法?我假設它與運行循環有關,但我無法弄清楚。幫助將不勝感激。相對簡單的代碼在

UINavigationController* navController = self.navigationController; 

int count = [navController.viewControllers count]; 

NSMutableArray* controllers = [[NSMutableArray alloc] initWithCapacity:count]; 

for (int i=0; i<count; i++) { 
    if (self == [self.navigationController.viewControllers objectAtIndex:i]) { 
    [controllers addObject:newController]; 
    } 
    else { 
    [controllers addObject:[self.navigationController.viewControllers objectAtIndex:i]]; 
    } 

} 
[self.navigationController setViewControllers:controllers animated:YES]; 
[controllers release]; 

回答

1

我真的不明白你在那裏做什麼。像這樣的東西不行?

- (void)displayMyErrorVC { 
    MyErrorVC *errorVC = [[[MyErrorVC alloc] init] autorelease];   
    [self.navigationController pushViewController:errorVC animated:YES]; 
} 

,然後在其他線程,如果你有一個錯誤:

[self performSelectorOnMainThread:@selector(displayMyErrorVC) withObject:nil waitUntilDone:NO]; 
+1

我曾嘗試與你相同的結果表明什麼爲好。正如我所提到的,它可以在UI中正常工作,但是我們的任何一種情況都會因回調而失敗,這是沒有道理的,因爲推送發生在主線程中。另一個說明。如果我將Animated設置爲NO,它似乎是一個不那麼流行的問題。我真的相信它必須是渲染的某種時間問題。例如,如果我推動2個控制器而不是1個,那麼它們會顯示出來。這太奇怪了。欣賞任何額外的想法,如果你有一些 – 2010-10-18 19:38:22