今天我的问题是关于UITableViewController-s 特别是我注意到了数据源委托方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
被调用两次(即使例如我只是创建一个基于导航的应用程序而不添加一行代码..添加一个NSLog来跟踪它)。 现在,因为在我的应用程序中,我需要确定基于文件系统中文档选择的部分数量,我需要调用一些方法来实现。我已经将这些方法放在上面提到的方法中,因此它们将被调用两次,这是我不需要的。 问题是为什么它被调用两次,我可以调用一次吗? 我希望在官方文档中没有明确说明(这意味着我根本不读它:))。顺便说一句,我可以看到其他人发布类似的问题,但我找不到一个完全令人满意的答案。 谢谢。
答案 0 :(得分:12)
我遇到了同样的问题,只是调用了numberOfRowsInSection: 对于我收到的每个电话,答案都放在堆栈跟踪中。
第一次调用是由于我在viewDidLoad中创建的表头视图的更改:我的viewcontroller。
thumbView.tableHeaderView = nil;
thumbView.tableFooterView = nil;
这导致内部调用 _updateContentSize:,调用 heightForTable:,最终调用 numberOfRowsInSection:。这是我触发的内容,可以通过不执行上述代码轻松避免:)
第二次调用是合法的,以便重新加载数据。这是由布局事件触发的,很可能你不能跳过它。
我确信你可以观察到类似于numberOfSections:method
的东西所以,我的结论是,由于UITableView的实现,有很多情况下某些委托方法会被调用两次或更多,因为表视图必须刷新一些东西。我尝试围绕这个bug / feature / etc.设计我的代码。
希望有所帮助
答案 1 :(得分:2)
如果您的tableview包含在子视图控制器中, 在您的父ViewController上试试这个
[parentViewController addChildViewController:childViewController];
之前[parentViewController.view addSubview:childViewController.view]
答案 2 :(得分:0)
请在添加TableView
后检查您的代码,您可能会再次使用realodData
方法调用ViewWillAppear
方法
答案 3 :(得分:0)
如果您在故事板中错误地更改了表格视图的框架,则会发生这种情况。您点击故事板上已将表格视图添加为子视图,现在您的表格可能没有正确的框架你已经开始了。