reloadData 不调用 cellforrowatindexpath

Posted

技术标签:

【中文标题】reloadData 不调用 cellforrowatindexpath【英文标题】:reloadData doesn't call cellforrowatindexpath 【发布时间】:2012-06-30 02:07:52 【问题描述】:

也许这是一个相似的开始,但这是真的。

首先抱歉,如果格式不正确,第一次这样做。很长一段时间以来,我一直在使用 *** 来寻求帮助,它非常有帮助(谢谢大家),但这是我第一次发布自己的问题。这个问题已经被问过很多次了,但是当我调用 [self.tableView reloadTable] 时,会调用方法 numberOfSectionsInTableView 和 numberOfRowsInSection 而不是 cellForRowAtIndexPath。

我在搜索时看到的每个答案都是以下内容的变体:

    tableView 是nil numberOfRowsInSection 为 0 tableView 的委托/数据源未设置。这些都不是我的情况,所以我想知道还有什么问题。

但我不确定 4. 在错误的 uiTableView 上调用 reloadTable。或者是关于其他一些错误。

现在我的APP类似于dropbox, 首先,当我们登录它时,我们在 TableView.also 中得到一个文件列表(包括目录),我在视图底部添加了一个工具栏[self.navigationController.view addSubview:toolBar],当我触摸“刷新”按钮项时,它调用@ 987654324@ 并且运行良好。

第二次选择目录时,我们会得到一个新的文件列表表,即pushViewController by self.navigationController,但是这一次当我们触摸“刷新”时,语句[self.tableView reloadData]调用了numberOfSections、numberOfRows ,而不是 cellForRowAtIndexPath

关于为什么第二次不调用 cellForRow 有什么想法吗?提前致谢。

FileListViewController.h
@interface FileListViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>    

FileListViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    if (isDir)        
        FileListViewController *fileListViewController = [[FileListViewController alloc] init];
        [self.navigationController pushViewController:fileListViewController animated:YES];
    


- (void)refresh

    [Utilities refresh];//Utilities is my custom class.

    [self viewDidLoad];
    [self.tableView reloadData];

我在表格视图中返回的部分和行数不是0。

当我将NSLog(@"Calling reloadData on %@", self.tableView); 添加到“刷新”中时:

- (void)refresh

    [Utilities refresh];//Utilities is my custom class.

    [self viewDidLoad];
    NSLog(@"Calling reloadData on %@", self.tableView);
    [self.tableView reloadData];

然后它返回 Calling reloadData on ;内容偏移:0, 0>。委托:FileListViewController,数据源:FileListViewController

【问题讨论】:

【参考方案1】:

您不应手动调用[self viewDidLoad]。此方法旨在被覆盖,并自动调用。欲了解更多信息,请read this documentation。

【讨论】:

感谢您的建议。我已经删除了[self viewDidLoad],我同意你的看法。但是现在问题仍然存在,当我触摸目录下的“刷新”按钮时,[self.tableView reloadData] 不会调用 cellForRowAtIndexPath。是不是因为我分配了一个新的 tableView FileListViewController *fileListViewController = [[FileListViewController alloc] init] ? 可能您没有正确连接新 tableView(数据源和委托)或手动分配/初始化新 tableView 并将其分配给后来/早期从 xib 初始化的属性。

以上是关于reloadData 不调用 cellforrowatindexpath的主要内容,如果未能解决你的问题,请参考以下文章

collectionview reloaddata 刷新失效或者 不走cellforrow刷新cell

collectionview reloaddata 刷新失效或者 不走cellforrow刷新cell

关于UITableview刷新笔记

调用 reloadData 时 UITableView 有不需要的动画

reloadData 不调用 cellforrowatindexpath

UITableView 强制 sectionIndex 更新而不调用 reloadData