繁体   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