【问题标题】:UITableView delegate method called twiceUITableView 委托方法调用了两次
【发布时间】:2011-02-07 23:07:19
【问题描述】:

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

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

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

【问题讨论】:

  • 仅 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;方法被调用两次或uitableview的所有委托方法被调用两次?如果所有都被调用了两次,这意味着你的表正在重新加载两次......正在调用 uitableview 的“重新加载”方法吗?
  • 您好 Reena,感谢您的关注。只有 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;被调用两次。所有其他数据源委托方法的调用次数与您预期的一样多。例如 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 被称为 n = (可见单元格数) 并且它被限制为 (节数 x 每节的行数),每次你滚动并看到一些新的单元格,它被称为。唯一明显莫名其妙的双重调用是对于节数方法...
  • 你能发布 numberOfSectionsInTableView 方法的代码吗?
  • 嗯...当然,但我可以告诉你,只有语句:一个 NSLog 语句和'return 3;' (无论数量,相同的行为)。与此同时,我发现问题只存在于 UITableViewController,当仅使用 UITableView 时,该方法只会按预期调用一次。
  • 你有没有发现这是为什么?也发生在我身上。完全一样……

标签: objective-c iphone uitableview delegates call


【解决方案1】:

我遇到了同样的问题,只是调用了 numberOfRowsInSection: 我收到的每个呼叫的答案都放在堆栈跟踪中。

  1. 第一次调用是由于我在视图控制器的 viewDidLoad: 中所做的表头视图发生了变化。

    thumbView.tableHeaderView = nil;
    thumbView.tableFooterView = nil;
    

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

  2. 第二次调用是为了重新加载数据的合法调用。这是由某处的布局事件触发的,您很可能无法跳过它。

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

所以,我的结论是,由于 UITableView 的实现,在很多情况下某些委托方法将被调用两次或更多次,因为表视图必须刷新某些内容。我尝试围绕这个错误/功能/等设计我的代码。

希望对你有帮助

【讨论】:

  • 如果我设置或不设置 -> thumbView.tableHeaderView = nil; thumbView.tableFooterView = nil; “numberOfSectionsInTableView”调用了 5 次。为什么?
【解决方案2】:

如果您的 tableview 包含在子视图控制器中, 在你的父 ViewController 上试试这个

[parentViewController addChildViewController:childViewController];

[parentViewController.view addSubview:childViewController.view]之前

【讨论】:

    【解决方案3】:

    请检查您的代码,在添加TableView 后,您可能会再次调用realodData 表中的方法,可能是ViewWillAppear 方法

    【讨论】:

      【解决方案4】:

      如果您在情节提要中错误地更改了表格视图的框架,则可能会发生这种情况。假设您单击了情节提要,已将表格视图添加为子视图,现在您的表格可能没有正确的框架你一开始就设置好了。

      【讨论】:

        猜你喜欢
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 2014-07-03
        • 2013-07-10
        相关资源
        最近更新 更多