为啥“numberOrRowsInSection”在“viewDidLoad”中途被调用?

Posted

技术标签:

【中文标题】为啥“numberOrRowsInSection”在“viewDidLoad”中途被调用?【英文标题】:why does "numberOrRowsInSection" get called mid-way through "viewDidLoad"?为什么“numberOrRowsInSection”在“viewDidLoad”中途被调用? 【发布时间】:2011-03-19 08:36:58 【问题描述】:

背景:

    在我的 viewDidLoad 中,我正在将测试日历数据(通过 EventKit)加载到 iPhone。我注意到,当表格视图第一次加载时,它看不到这些数据。

    当我查看日志消息序列时,我发现它是这样的:

在这里登录:

[AppointmentListController viewDidLoad] Starting
[AppointmentListController populateTestData] Populating the test data now
[AppointmentListController tableView:numberOfRowsInSection:] Number of rows = 0
[AppointmentListController viewDidLoad] Loading the existing calendar events
[AppointmentListController viewDidLoad] Ending

问题

为什么“numberOrRowsInSection”在“viewDidLoad”中途被调用?我问这个是因为这就是我所看到的(这是应该发生的事情吗?)。

1234563更新了吗?

【问题讨论】:

【参考方案1】:

tableView:numberOfRowsInSection: 方法可能会被调用,因为您在表视图上配置了某些内容(可能您已将其添加到其父视图中),因此它需要知道其指标。它不会突然神奇地自行触发。要么确保在配置 UI 元素之前准备好数据,要么在接近尾声时调用 reloadData,但我发现前者更“干净”。

【讨论】:

ok DarkDust - 可以在“viewDidLoad”方法中设置 UI 元素,不是吗?在这种情况下,我认为您在“viewDidLoad”中说在点击 UI 元素配置行之前先加载您的数据 - 我在这里理解正确吗? 是的,在viewDidLoad 中设置和配置 UI 元素非常好。是的,您已经理解正确了:在 viewDidLoad 方法中首先设置非 UI 数据(只要它们不依赖来自 UI 元素的数据),然后设置 UI 元素。这样你就不需要自己调用reloadData,它会在表格视图方便的时候调用,从而避免不必要的方法调用。 我在 viewDidLoad 中创建视图模式。但在此之前它调用了 tableView:numberOfRowsInSection,并且 viewmodel 为 nil。应用程序崩溃了。【参考方案2】:

这很正常……

Call [self.tableView reloadData]

;在 viewdidload 结束时

【讨论】:

以上是关于为啥“numberOrRowsInSection”在“viewDidLoad”中途被调用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?