我有一個奇怪的問題時。我有一個Tab Bar應用程序,其中我爲每個不同的選項卡使用一個導航控制器,每個導航控制器都有它自己的View Controller來顯示一些內容。iOS版 - viewDidAppear:延遲顯示一個UITableView
當我觸摸一個選項卡時,我希望選項卡能夠立即加載視圖並加載後(viewDidAppear:
)我希望它能夠在viewDidAppear:方法中下載一些數據。
爲了測試這個功能,我已經安裝了下面的方法。我正在使用NSThread
來模擬一些冗長的操作,這些操作應該在視圖加載後在後臺完成。然後,我給NSArray * test(nonatomic,retain)分配一些測試數據並重新載入表格。
我重裝了表,因爲在viewDidLoad
方法我設置表格只包含一個空字符串(這是因爲我讀該表是viewDidAppear前設置:被稱爲
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
DLog(@"viewDidAppear running");
[NSThread sleepForTimeInterval:10];
NSArray *array = [[NSArray alloc] initWithObjects:@"Test1", @"Test2", @"Test3", @"Test4", @"Test5", @"Test6", nil];
self.test = array;
[array release];
[table reloadData];
}
所以我的預期行爲應該是,當觸摸這個特定的選項卡時,它應該立即加載,然後在10秒鐘後它應該填充來自viewDidAppear:方法的表格數據但是而不是當觸摸此選項卡時等待10秒,然後顯示填充了表格數據的視圖。
我認爲那正是我正在尋找的,但是你也許知道爲什麼我的表沒有在viewDidAppear之前顯示:?我的表正在等待viewDidAppear:方法運行,然後顯示錶。 –
如果您在viewDidAppear中「阻止」代碼執行,用戶界面將無法繪製和刷新自己,因爲ui刷新(主要)是由該主線程完成的。因此,在該方法運行後,系統將運行代碼以實際繪製用戶界面和表格。這有幫助嗎? – marcus
如果我刪除了NSThread調用,viewDidAppear仍然會延遲。至於我的理解,視圖應該在loadView運行後立即顯示,然後執行viewDidAppear中的任何內容。但這裏的情況是視圖不是立即顯示,而是等待viewDidAppear方法運行,然後顯示視圖。 –