2015-10-19 156 views
1

我是一個新手iOS程序員,在我的第一個應用程序工作,我遇到了一個小問題。我想在網上下載一些數據後更新我的tableView,並有其控制器中下面的代碼這樣做:reloadData不刷新屏幕

-(void)storeChanged:(EventsStore *)store 
{ 
    NSLog(@"Store changed!"); 
    NSLog(@"tableview is %@", self.tableView); 

    self.openSectionIndex = NSNotFound; 

    NSLog(@"event count: %i", [[[EventsStore sharedStore] allEvents] count]); 

    [self.tableView reloadData]; 
} 

(注:該店鋪爲單身,所以沒有必要參數)

當它運行我得到以下輸出:

2015-10-19 15:12:42.487 Appname[3366:69443] Store changed! 
2015-10-19 15:12:42.487 Appname[3366:69443] tableview is <UITableView: 0xc00e000; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0xb114d30>; layer = <CALayer: 0xb112f30>; contentOffset: {0, -64}; contentSize: {320, 0}> 
2015-10-19 15:12:42.487 Appname[3366:69443] event count: 12 

但保持的tableView空,直到我嘗試滾動,此時它正確地顯示一切。

tableViewController是一個自定義類(擴展UITableViewController),顯示在導航控制器中,兩者都在故事板內。據我所知,所有的網點都已經設定好了,但是如果你有一個關於如何排除故障的方法,請告訴我。

編輯:我只是有一個想法可能是什麼原因:這個函數是從一個completionBlock內部調用的。如果這就是原因,有人知道如何規避它嗎?

+2

你確定這是從主線程調用? –

+1

沒有足夠的信息。數據如何下載?什麼時候調用storeChanged?你的numberOfRowsForSection表視圖方法是什麼樣的? (顯示代碼)也顯示你的numberOfSectionsInTableView方法。 –

+1

可以在節中顯示您的numberOfRows方法 –

回答

2

您很可能在非主線程上執行了storeChanged

做到這一點,你會很高興:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableView reloadData]; 
}); 
+0

您明白了,謝謝。 – Cesar