将数据传递给collectionView(numberOfItemsInSection)函数(Swift)

问题描述:

我无法将数据从模型传递到集合视图。我已经简化我的代码,以一个简单的项目来说明问题,这是可以在这里找到:https://github.com/routineCode/collectionViewDataProblem将数据传递给collectionView(numberOfItemsInSection)函数(Swift)

这里是一个图像显示所需的结果与当前的代码实际结果: View Controller output showing Desired vs. Actual Result

我想collectionView(numberOfItemsInSection)函数返回我的[data]数组中的项目数(5),但它返回硬编码值(3)。通过调试,我意识到这是因为调用此函数时viewController始终为零,但我不明白如何解决此问题。我也使用collectionView(cellForItemAt)函数中的[data]数组,并且该函数正常工作,因为在该函数被调用时viewController不是零。谢谢你的帮助。

尝试reloadData您设置的视图控制器

lazy var menuBar: MenuBar = { 
    let mb = MenuBar() 
    mb.viewController = self 
    mb.cView.reloadData() 
    return mb 
    }() 

后,顺便问一下,你的代码与内存问题泄露

保留圈

保留圈是当两个物体具有很强的互相参照,所以没有人不会释放。 Here是一个与您的完全相同的保留圈的示例。

在代码中的ViewController具有很强的参考菜单栏

lazy var menuBar: MenuBar ... 

,菜单栏具有很强的参考视图控制器

var viewController: ViewController? 

您可以将的viewController属性设置为弱,但什么你给整个ViewController?为什么你的menuBar应该知道整个viewController?你可以删除viewController属性,并给它一个数据属性。

let data = [String]() 

,并设置它在你的viewController

lazy var menuBar: MenuBar = { 
    let mb = MenuBar() 
    mb.data = data 
    return mb 
    }() 
+0

您的建议添加的行mb.cView.reloadData()工作。谢谢。 –

+0

关于您的其他意见:我只发布了足够的代码来显示问题。在我最初的代码中,有一个像这样的viewController.scrollToMenuInde​​x(indexPath.item)的函数调用我知道如何进行这样的调用的唯一方法是使用静态函数,但是当我尝试过让它工作时出现问题。因此,我建议在MenuBar类中使用weak var viewController。再次感谢。 –