簡體   English   中英

[tableView reloadData]; 在我滾動tableView之前不起作用

[英][tableView reloadData]; doesn't work until I scroll the tableView

我有一個簡單的應用程序,當用戶鍵入UISearchBar時,它會以XML格式下載搜索結果。 下載+解析是線程化的,一旦完成它就會激活一個NSNotification來告訴ViewController表視圖為[tableView reloadData];

以下是在結果出現時接收通知的代碼:

- (void)receivedResults:(id)notification {
    results = [notification object];
    DLog(@"Received %i results",[results count]);
    [[self tableView] reloadData];
}

我得到日志輸出“Received 4 results”,但表格視圖不會重新加載數據,直到我滾動/拖動幾個像素。 我正在使用內置的UITableViewCellStyleSubtitle單元格樣式,並且我不會更改高度或任何與表視圖相關的東西。

我究竟做錯了什么?

我能夠得到同樣的工作。 但問題是需要在主線程上調用重載數據。

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

我認為這比performSelectorOnMainThread選項更實用

呼叫

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

代替

[self.tableview reloadData]

我的問題是我從后台線程發布了NSNotification。 要避免這種情況,只需將postNotificationMethod包裝在dispatch_async方法中,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"FinishedDownloading" object:result];
});

收到此通知后,將在主線程上調用tableView.reloadData

我有同樣的問題,我已經嘗試了我可以在谷歌上找到的所有解決方案。 但所有這些都不起作用。

最后我發現我在viewDidLoad之前添加了觀察者,然后[self.tableView reloadData]無效。

首先,我在根導航視圖控制器的viewDidLoad中調用setObserverForUserInfoDatabase。 因為我認為它早先被稱為。 功能是這樣的:

- (void)setObserverForUserInfoDatabase:(NSString *)name {
    [[NSNotificationCenter defaultCenter] addObserverForName:name
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
                                                      [self loadUserInfo];
                                                      [self.tableView reloadData];
                                                      NSLog(@"User Panel Notification \n %@", self);
                                                  }];}

然后我將代碼移動到viewController本身的viewDidLoad中。

- (void)viewDidLoad {
    NSLog(@"View Did Load");
    [super viewDidLoad];

    [self setObserverForUserInfoDatabase:UserInfoDataBaseAvailabilityNotification];
}

然后一切正常。

我還不知道原因。 如果有人知道請告訴我。

viewWillLayoutSubviews 重新加載 tableView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM