reloadData 被调用两次?

Posted

技术标签:

【中文标题】reloadData 被调用两次?【英文标题】:reloadData gets called twice? 【发布时间】:2011-03-09 04:03:15 【问题描述】:

我已经为我的应用程序查看此代码很长时间了。当用户添加 ALBUM 时,它会将其添加到 RootViewController 中的数组 (listOfItems) 中。然后不同的类调用它来更新(reloadData)。在查看了一些 NSLogs 之后,它会执行以下操作

numberOfRowsInSection 更新行数(正确) cellForRowAtIndexPath显示行(NSLog显示listOfItems是正确的) numberOfRowsInSection 重复并删除所有新数据 cellForRowAtIndexPath 再次重复,它显示了除新数据之外的所有内容

我不知道它为什么会重复 - 我只打电话给[self.tableView reloadData]; 一次。

我已经检查了我所有的 NSTimers,我什至让应用程序在那里停留了大约一分钟,控制台中什么也没有出现。

请帮忙! 库尔顿

PS:如果您需要任何代码,请询问!


编辑:这是一个关于正在发生的事情的示例 NSLog

Number Of Rows: 3
Array: (One, Two, Three)

单元格文本:一个 单元格文本:两个 单元格文本:三个

--- 添加“四”的单元格---

Number of Rows: 4
Array: (One, Two, Three, Four)

Number of Rows: 3
Array: (One, Two, Three)

Cell Text: One
Cell Text: Two
Cell Text: Three

编辑:完整的 RootViewContoller.m

REMOVED

PS:抱歉代码太长,再次感谢!

【问题讨论】:

【参考方案1】:

对于表格视图中显示的每个单元格,CellForRowAtIndexPath 重复,需要更多关于放置 NSLogs 的信息。

【讨论】:

我没有看到您放置 NSLog 代码的区域,(可能是说明您如何获得这些 nslog 的示例代码)。我不明白这些是如何造成问题的。 刚刚添加了我的 RootViewController.m【参考方案2】:

numberOfRowsInSection 的实现中的某处添加断点。当您点击断点切换到调试器视图并查看堆栈跟踪。为您收到的两个电话执行此操作。 在堆栈中向下查找,直到找到属于您的方法(以粗体显示)。你应该能够知道你在哪里打电话给reloadData

如果对于断点命中,您找不到任何自己的方法作为调用源,那么也许您确实有一个 NSTimer 或为您调用它的东西。

调试愉快:)

【讨论】:

添加了断点,但应用程序无法加载。这不好,因为我稍后会添加内容。 您可以在应用程序启动后添加断点。只需启动应用程序并获得一个您认为接近加载您提到的数据的点。然后转到 XCode,添加断点并继续使用应用程序,直到遇到断点。这样您就不会在每次 reloadData 时卡在每个屏幕上。一个更酷的方法是使用条件断点。到目前为止我从未使用过它们,所以我无法为您提供帮助,但我知道它们存在:仅在满足条件时触发的断点。【参考方案3】:

不确定这是否有帮助,但如果您的班级中有 [super viewWillAppear:animated] 的评论,请尝试在 viewWillAppear 中评论。这似乎是较新版本的 sdk 中的一个错误。

- (void)viewWillAppear:(BOOL)animated 
    //[super viewWillAppear:animated];

【讨论】:

【参考方案4】:

如果其他人有这个问题,只需使用 NSTimer 每 X 秒重新加载一次数据。我什至在 ARAAY 上做了一个小计数器,它填充了当前表中的数据和 ROWS,看看是否有必要更新。如果没有,它什么也做不了。

【讨论】:

以上是关于reloadData 被调用两次?的主要内容,如果未能解决你的问题,请参考以下文章

reloadData 不调用 cellforrowatindexpath

numberOfRowsInSection:未在 reloadData 上调用

UICollectionView reloadData后cell被隐藏

iOS - tableView 的 reloadData 不调用 cellForRowAtIndexPath

移动时附加到 UICollectionView 中的单元格的弹出框被称为此集合视图的 ReloadData

如何让 tableView.reloadData() 与核心数据正常工作?