繁体   English   中英

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

[英]Passing Data to collectionView(numberOfItemsInSection) function (Swift)

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

这是使用当前代码显示所需结果与实际结果的图像: 查看控制器输出,显示所需结果与实际结果

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

设置ViewController后尝试reloadData

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

顺便说一句,您的代码有内存泄漏问题

保留圈

保留圈是两个对象之间具有很强的参照关系,因此没有人永不释放。 是一个与您的保留圆完全相同的保留圆的示例。

在您的代码中,ViewController对menuBar有很强的引用

lazy var menuBar: MenuBar ...

而且MenuBar对ViewController有很强的引用

var viewController: ViewController?

您可以将viewController属性设置为weak,但是为​​整个ViewController提供什么呢? 为什么您的menuBar应该了解整个viewController? 您可以只删除viewController属性,然后给它一个data属性。

let data = [String]()

并在您的viewController中进行设置

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM