在使用 reloadData 之前我应该清除表视图吗?
我想将新值放入表视图中。
我的 tableView:cellForRowAtIndexPath:
具有以下内容
if (cell == nil) { // do something }
当我删除顶部的 if 语句并使用 reloadData
时,应用程序崩溃。在使用 reloadData
之前,我是否需要清除表中的旧值?如果是这样怎么办?
谢谢
编辑:
抱歉,我不是故意将reloadData
放入tableView:cellForRowAtIndexPath:
中。我把它放在另一个方法中,并从 tableView:cellForRowAtIndexPath:
内部删除了 if (cell == nil) { // do some }
I want to put new values in a table view.
My tableView:cellForRowAtIndexPath:
has the following
if (cell == nil) { // do something }
When I remove the if statement on top and use reloadData
the app crashes. Do I need to clear the old values in the table before I use reloadData
? If so how?
Thanks
Edit:
I'm sorry i didnt mean that i put reloadData
inside tableView:cellForRowAtIndexPath:
. i put it inside another method and removed if (cell == nil) { // do something }
from inside tableView:cellForRowAtIndexPath:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您应该阅读 TableView 编程指南 熟悉这些概念。
reloadData
是最终调用tableView:cellForRowAtIndexPath:
的方法。You should read the TableView Programming Guide to familiarize yourself with the concepts.
reloadData
is a method that eventually callstableView:cellForRowAtIndexPath:
.您通过在内部调用 reloadData 来生成无限循环
You are generating infinite loop by calling reloadData inside
无需清除表视图中的数据。不过,您可能需要确保在 UITableViewCell 子类中正确实现
-prepareForReuse
,以便重用的单元格不会显示旧数据。顺便说一句,不清楚为什么要删除 if (cell == nil) 位。如果没有可以重用(出列)的单元,那么您需要创建一个新单元。如果不这样做,您将返回 nil,这将导致 UITableView 出现异常。
There is no need to clear data in a table view. You may want to ensure you properly implement
-prepareForReuse
in your UITableViewCell subclasses though, so that reused cells don't show old data.It's BTW unclear why you want to remove the
if (cell == nil)
bit. If there is no cell to reuse (dequeue) then you need to create a new one. If you don't you'll return nil, which will cause an exception in UITableView.您(99% 的时间)无法从
tableView:cellForRowAtIndexPath:
调用reloadData
。这是因为
reloadData
最终会调用tableView:cellForRowAtIndexPath
,因此您会得到一个永无休止的循环。您需要更多地解释您想要做什么(并且一些额外的代码会很好),以便进一步回答问题。
You (99% of the time) can't call
reloadData
fromtableView:cellForRowAtIndexPath:
.This is because
reloadData
eventually callstableView:cellForRowAtIndexPath
, so you get a never ending loop.You need to explain more what you trying to do (and some extra code would be nice) in order to answer the question further.
reloadData 调用所有 tableView 数据源,因此不能在 cellForRowAtIndexPath 中调用它,否则会造成无限循环。
reloadData calls all tableView data source , so you cann't call it in cellForRowAtIndexPath it will make an infinite loop.