【问题标题】:Reload UITableView with a different number of rows用不同的行数重新加载 UITableView
【发布时间】:2011-04-27 15:31:52
【问题描述】:

我已经设置了一个 UITableView 并且可以正常工作,但现在我遇到了一个小问题。每当加载视图时,我都需要重新加载 tableView 的数据,而我无法开始工作的一件事是尝试重新加载数据,而此时表格视图中没有数据。

基本上列表是可变长度的,内容是从文件中加载的,我想知道的是,有没有办法可以强制表重新加载而不让它忽略数据源方法,就像什么每当调用 [tableView reloadData] 时都会发生。

【问题讨论】:

    标签: ios objective-c iphone uitableview


    【解决方案1】:

    [tableView reloadData] 完全依赖于数据源方法!因此,您会看到您的数据源方法被忽略的唯一方法是您没有将表视图的数据源(可能还有委托)设置为您希望成为数据源的对象。您可以通过 Interface Builder 或以编程方式设置这些,例如:

    tableView.dataSource = self;
    tableView.delegate = self;
    

    【讨论】:

    • 数据源/委托都已设置,但我觉得它只会重新加载表格中已经存在的每个单元格的数据,在本例中为 0。
    • 不应该这样。 numberOfRowsInSection: 的典型实现是返回数组中对象的计数。所以我不得不相信经常会参考这样的数据源方法。您可以在该方法中设置断点以验证它是否被调用。当然,您必须实际致电reloadData:。我想你至少在这样做,对吧? :-)
    • 对,我设置了断点,发现每次加载视图时都会调用它,并仔细检查我是否调用了 reloadData :) 现在它似乎正在工作。这一定与另一个视图写入文件并将其搞砸有关 - 是的杂项错误!但至少我们知道现在每次都会调用 numberOfRowsInSection。
    • 不错。当奇怪的行为“消失”时,我喜欢它,但我的专业软件开发人员总是因为不知道到底发生了什么而感到不安...... :-)
    • 是的,我知道这种感觉,但我并不担心,我相信它很快就会回来并让我得到...
    【解决方案2】:

    每当视图加载时

    你在哪里调用 reloadData?您是否在 -viewDidLoad 方法中调用它?如果是,那可能是不正确的,因为 -viewDidLoad 只被调用一次——当创建相应的 UIViewController 的视图时(在第一次使用时)。也许你应该看看每当要显示视图时调用的 -viewWillAppear(假设 UIViewController 的正确使用)。

    另一个可能的原因是,如果您确实使用了 -viewWillAppear(或 -viewDidAppear),它根本不会被触发。如果您使用自定义 UIViewController 层次结构,则可能会发生这种情况。在这种情况下,您必须亲自调用它(有例外 - 例如 UINavigationController 会为您执行此操作,但简单的 [someView addSubview:myController.view] 不会)。

    另外请检查委托是否设置正确并且 tableView 不等于 nil(因为您知道发送到 nil 的消息会被忽略)。

    【讨论】:

    • 是的,使用-viewDidAppear,我检查了这个方法,每次加载视图时都会调用它(tabbar 控制器中的tableview 控制器)。代表也确实成立了。不过感谢您的回复!
    【解决方案3】:

    调用 [tableView reloadData] 时不会忽略数据源方法; 您是否正确设置了 IBOUTLET 和来源?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      相关资源
      最近更新 更多