我无法将数据从模型传递到集合视图。我已将我的代码简化为一个简单的项目来说明问题,可在此处找到:https://github.com/routineCode/collectionViewDataProblem
以下是使用当前代码显示所需结果与实际结果的图像: View Controller output showing Desired vs. Actual Result
我希望collectionView(numberOfItemsInSection)函数返回我的[data]数组中的项目数(5),但它返回硬编码值(3)。通过调试,我意识到这是因为调用此函数时viewController总是为nil,但我不了解如何解决问题。我还使用了collectionView(cellForItemAt)函数中的[data]数组,这样可以正常工作,因为在调用函数时viewController不是nil。谢谢你的帮助。
答案 0 :(得分:0)
设置ViewController
后尝试重新加载数据lazy var menuBar: MenuBar = {
let mb = MenuBar()
mb.viewController = self
mb.cView.reloadData()
return mb
}()
顺便说一下,你的代码存在内存泄漏问题
保留圈子
保留圆是指两个对象之间具有强引用,因此没有人永远不会释放。 Here是保留圈子的示例,与您的圈子完全相同。
在您的代码中,ViewController强烈引用menuBar
lazy var menuBar: MenuBar ...
MenuBar强烈引用了ViewController
var viewController: ViewController?
您可以将viewController属性设置为weak,但是您为整个ViewController提供了什么?为什么你的menuBar应该知道整个viewController?你可以删除viewController属性,改为给它一个数据属性。
let data = [String]()
并在viewController
中设置它lazy var menuBar: MenuBar = {
let mb = MenuBar()
mb.data = data
return mb
}()