UITableView在模型数据更改后不重新加载数据(未触发cellForRowAtIndexPath)

时间:2010-09-09 04:27:42

标签: iphone objective-c

对于我目前正在处理的应用程序,我的一个主要ViewControllers包含两个UITableViews,其内容根据我的模型中存储的内容(SQL支持的Core Data)而有所不同。两个tableviews都将它们的委托和数据源属性设置为它们都是子视图的共享VC,并且我在VC中提供必要的方法来响应特定于tableview的事件。

我发现当我向数据库添加新数据时应该导致TableViews显示新行,然后我返回VC并在VC的viewWillAppear方法中调用两个TableViews上的reloadData,我看到 numberOfRowsInSection 根据CoreData中的新条目返回正确的行数,但 cellForRowAtIndexPath 未被调用正确的次数,几乎就像它没有响应模型数据中的更改一样。例如,如果我有3行显示然后应用程序启动,我在CoreData中添加了另一个条目,然后调用reloadData, numberOfRowsInSection 正确返回4,但 cellForRowAtIndexPath 仅叫了3次。

除了我可能正在使用更合适的东西(如NSFetchedResultsController)将我的TableViews链接到CoreData之外,是否有任何理由为什么 cellForRowAtIndexPath 没有被调用正确的次数,正如 numberOfRowsInSection 返回的正确行数?

我会放入一些代码,但它确实是标准的样板表TableView,我觉得还有其他一些我不知道的。

2 个答案:

答案 0 :(得分:2)

为了确保您理解正确,使用屏幕中可以包含的单元格数调用cellForRowAtIndexPath:。如果您有4个单元格,但由于单元格的高度,用户只能使用3个单元格,那么cellForRowAtIndexPath:将被调用3次

答案 1 :(得分:0)

如果用户只能看到3个单元格而不是更多单元格,那么即使表格中有100行,单元格加载回调也可能只被调用3次。