将数据传递给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
}()
您的建议添加的行mb.cView.reloadData()工作。谢谢。 –
关于您的其他意见:我只发布了足够的代码来显示问题。在我最初的代码中,有一个像这样的viewController.scrollToMenuIndex(indexPath.item)的函数调用我知道如何进行这样的调用的唯一方法是使用静态函数,但是当我尝试过让它工作时出现问题。因此,我建议在MenuBar类中使用weak var viewController。再次感谢。 –