我在使用Swift 3
中的tableView.reloadData()时出现问题因此我得到numberOfRowsInSection回调,但我没有得到cellForRowAt回调。当行数> 1时,为什么我会得到一个回调而不是另一个回调?第一次回电时是0?
related但我认为一个是在紧迫的时候不调用tableView.reloadData()。我正在调用该函数,但只能获得两个必要回调中的一个。
在我看来,我做了加载
tableView.dataSource = self
tableView.delegate = self
所以我设置了所有
表加载必须等待一些读取,所以我使用的是一个名为SwiftEventBus的库,它是NotificationCenter的包装器
我正在收听帖子,以便知道是时候重新加载表了。侦听器位于包含UITableView的ViewController中。 'eventMessage'是通过SwiftEventBus发布的命名事件
SwiftEventBus.onMainThread(self.target as AnyObject, name : eventMessage) { result in
self.makeDisplayArray()
}
简化的makeDisplayArray函数如下。主要的是它要求重新加载表。我尝试使用和不使用DispatchQueue,它没有任何区别。
func makeDisplayArray() {
//DispatchQueue.main.async {
self.tableView.reloadData()
//}
}
我第一次从数据库加载,我得到事件消息,然后调用reloadData()并加载表(例如,我得到numberOfRowsInSection回调,并且我获得了cellForRowAt回调)。一切都很好。
我第二次尝试通过相同的逻辑时,我只得到numberOfRowsInSection回调(非零数字 - 我有行显示)但是我没有得到cellForRowAt回调。
我在两个回调中都放置了打印消息。为什么我会得到一个回调而不是另一个回调。如果我得到numberOfRowsInSection,那么表必须尝试按要求加载,但是为什么没有cellForRowAt回调。每次我通过逻辑后都会发生这种情况。
另外 - 等待数据加载触发表加载的更好方法是什么?这不是一个简单的单一阅读。这个负载需要多次读取(我正在使用Firebase,因此必须先跟踪多个异步读取的完成,然后才能发出事件POST来通知视图控制器)。我可以将所有这些读取逻辑放在视图控制器中,但更喜欢单独调用处理数据访问 - 这需要进行某种类到类的通信。
=============================================== ===========================
屏幕截图以响应将tableview背景设为红色作为测试的评论
从表回调方法中打印调试消息
第一次通过逻辑
加载带有3个条目的LIST表[在numberOfRowsInSection中打印]
在[来自cellForRowAt内部的所有打印件中的其余部分]输入行的单元格
----使用标题Dad Groceries
加载第0行的LIST表在
处输入行的单元格----使用标题Chloe Vaca Stuff
加载第1行的LIST表在
处输入行的单元格----为第2行加载LIST表,标题为New List
第二次通过相同的逻辑
加载带有3个条目的LIST表[在numberOfRowsInSection中打印]
.. ???现在不调用cellForRowAt。没有打印消息,除了从numberOfRowsInSection返回的非零值,它返回与cellForRoawAt相同的数组。