2010-01-29 65 views
0

我想讓我的UIViewController出現在屏幕上,並在中央顯示「Loading ...」UILabel,然後,一旦顯示,就開始加載數據以顯示。如何在加載後填充UIViewController?

我該如何做到這一點?我試圖在viewDidAppear中加載它,但此時視圖仍然沒有顯示在屏幕上,所以應用程序對用戶沒有反應。如果我嘗試設置一個短計時器(0.0001秒),以便顯示視圖,然後在運行循環中調用數據加載方法,出於某種原因,打開視圖控制器以查看內容所需的時間與沒有計時器的時間是它的三倍。在這種情況下,出現Loading ...文本,但用戶必須等待太長時間。

這樣做的最好方法是什麼?

回答

0

最好在viewDidLoad的線程中調用你的方法,在調用線程之前顯示你的標籤和當數據通過線程加載時隱藏標籤。

你可以這樣做。

-(void)viewDidLoad{ 
[self showLabel]; 
[NSThread detachNewThreadSelector:@selector(loadData:) toTarget:self withObject:nil]; 
} 

更新

- (void) loadData:(id)object{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    //Network Operations 
    //... 
    //... 
    //... 
    //... 
    [self performSelectorOnMainThread:@selector(reloadView:) withObject:arg waitUntilDone:[NSThread isMainThread]]; 
    [pool release]; 
} 

希望這有助於。 謝謝,

Madhup

+0

一定要放在單獨的線程在一個自動釋放池,或者您會得到內存泄漏 – nathanjosiah 2010-01-29 05:24:19

+0

可可不是線程安全的,所以這將只有當'loadData工作:'方法分流所有GUI操作到主線程上。 – Bill 2011-02-23 19:14:22

+0

@ Bill我認爲這很明顯。順便更新答案。 – 2011-02-24 05:07:52

0

如果我沒有誤會你的目的,我認爲你只是想播「加載」狀態的用戶,對不對?如果是這樣,我建議你可以使用一個簡單的ViewController來顯示標籤'Loading ...',然後創建MainViw或下一個視圖,最後顯示給用戶,當它完成時,隱藏第一個視圖顯示在屏幕上的MainView ...