【问题标题】:iphone - numberOfRowsInSection being called before viewDidAppeariphone - numberOfRowsInSection 在 vi​​ewDidAppear 之前被调用
【发布时间】:2011-06-17 19:48:07
【问题描述】:

这可能很正常,但我是 Objective-c 的新手。 我有一个带有两个视图控制器的应用程序,它们都是表视图。 单击一行时,我将第二个视图加载到堆栈的顶部,并通过其中一个属性传递一个参数。 在第一个视图(由导航控制器默认加载)上,首先调用 viewDidAppear 函数,它从 URL 打开一个 XML 文件,为每个节点构建一个对象并将所有对象推入一个数组。完成后,调用 numberOfRowsInSection 并返回数组的计数,一切正常。 在另一个视图中,首先加载后调用 numberOfRowsInSection,然后调用 viewDidAppear。我真的是 iphone 新手,我不知道为什么会发生这种情况。

谢谢!

【问题讨论】:

    标签: iphone objective-c cocoa-touch uitableview uitabbarcontroller


    【解决方案1】:

    这是正常的。 viewDidAppear 在整个视图完成加载并可见后调用。 这包括UITableView。反过来,表格视图需要 numberOfRowsInSection 函数来初始化。

    UITableView 加载之前,您有三个选项来执行代码:

    1) 将您的代码放入 -viewWillAppear - 这有时会不稳定

    2) 子类化 UIViewController(你可能已经这样做了)并创建一个自定义的 -init 函数来处理你的设置

    3) 将初始化代码放入-numberofRowsInSection。这始终是要调用的UITableViewDataSource 的第一个方法。它很老套,但在实践中效果很好。

    【讨论】:

    • 在大多数情况下,数据加载代码不会去 viewWillAppear 或 viewDidAppear,因为通常不需要在出现/消失后重新加载视图。
    【解决方案2】:

    也许您应该考虑将您的代码移至-viewWillAppear-viewDidLoad

    【讨论】:

    • 它适用于一种视图,为什么它不适用于另一种?
    • 数据加载后,只需[tableView reloadData]更新视图。
    • @Elad:UITableView 可能会延迟加载单元格(可能在 -layoutSubviews 中)。在非动画转换中,-viewWillAppear: 和 -viewDidAppear: 都会立即调用;在动画过渡中,表格视图必须先布局,然后才能开始在屏幕上制作动画。
    【解决方案3】:

    感谢大家抽出宝贵时间回复! 我发现了这个问题。 作为 xcode/iphone/mvc 的新手,我忘记将视图连接到 IBOutlet 对象。 我生命中的几个小时,我再也回不来了。

    【讨论】:

    • 恐怕我已经多次成为这个 n00b 错误的受害者。
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2014-12-10
    • 2018-02-19
    相关资源
    最近更新 更多