tableView.reloadData()获取numberOfRowsInSection但不获取cellForRowAt(其中count> 0)

时间:2017-04-26 05:49:27

标签: ios uitableview callback

我在使用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背景设为红色作为测试的评论 Where did my rows go?

从表回调方法中打印调试消息

第一次通过逻辑

加载带有3个条目的LIST表[在numberOfRowsInSection中打印]

在[来自cellForRowAt内部的所有打印件中的其余部分]输入行的单元格

----使用标题Dad Groceries

加载第0行的LIST表

处输入行的单元格

----使用标题Chloe Vaca Stuff

加载第1行的LIST表

处输入行的单元格

----为第2行加载LIST表,标题为New List

第二次通过相同的逻辑

加载带有3个条目的LIST表[在numberOfRowsInSection中打印]

.. ???现在不调用cellForRowAt。没有打印消息,除了从numberOfRowsInSection返回的非零值,它返回与cellForRoawAt相同的数组。

0 个答案:

没有答案