reloadData被调用两次?

时间:2011-03-09 04:03:16

标签: objective-c cocoa-touch uitableview ios4 reloaddata

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

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

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

我已经检查了所有的NSTimers,我甚至让应用程序在控制台显示中只坐了一会儿。

请帮忙! 库尔顿

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


编辑:以下是发生了什么的NSLog示例

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

Cell Text:One     单元格文本:两个     单元格文本:三个

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

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:很抱歉长代码,但再次感谢!

4 个答案:

答案 0 :(得分:3)

对于tableview中显示的每个单元格,CellForRowAtIndexPath会重复,需要更多关于放置NSLog的位置的信息。

答案 1 :(得分:2)

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

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

快乐的调试:)

答案 2 :(得分:1)

不确定这是否有帮助,但如果您在课堂上有[super viewWillAppear:animated],请尝试在viewWillAppear中取消- (void)viewWillAppear:(BOOL)animated { //[super viewWillAppear:animated]; } 。它似乎是较新版本的sdk中的一个错误。

{{1}}

答案 3 :(得分:-1)

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