UITableView委托方法调用两次

use*_*739 14 iphone delegates objective-c call uitableview

今天我的问题是关于UITableViewController-s特别是我注意到了datasource委托方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
Run Code Online (Sandbox Code Playgroud)

被调用两次(即使例如我只是创建一个基于导航的应用程序而不添加一行代码..添加一个NSLog来跟踪它).现在,因为在我的应用程序中,我需要确定基于文件系统中文档选择的部分数量,我需要调用一些方法来实现.我已经将这些方法放在上面提到的方法中,因此它们将被调用两次,这是我不需要的.问题是为什么它被调用两次,我可以调用一次吗?我希望在官方文档中没有明确说明(这意味着我根本不读它:)).顺便说一句,我可以看到其他人发布类似的问题,但我找不到一个完全令人满意的答案.谢谢.

And*_*scu 12

我遇到了同样的问题,只是调用了numberOfRowsInSection:对于我收到的每个电话,答案都放在了堆栈跟踪中.

  1. 第一个调用是由于我在viewDidLoad中生成的表头视图的更改:我的viewcontroller.

    thumbView.tableHeaderView = nil;
    thumbView.tableFooterView = nil;
    
    Run Code Online (Sandbox Code Playgroud)

    这导致对_updateContentSize的内部调用:调用heightForTable:最终调用numberOfRowsInSection : . 这是我触发的内容,可以通过不执行上述代码轻松避免:)

  2. 第二个调用是为了重新加载数据的合法调用.这是由布局事件触发的,很可能你不能跳过它.

我相信你可以观察到类似于numberOfSections:方法的东西

因此,我的结论是,由于UITableView的实现,有许多情况下某些委托方法将被调用两次或更多次,因为表视图必须刷新一些东西.我尝试围绕这个bug/feature/etc设计我的代码.

希望能帮助到你