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

时间:2017-07-02 03:16:00

标签: ios swift uicollectionview parameter-passing

我无法将数据从模型传递到集合视图。我已将我的代码简化为一个简单的项目来说明问题,可在此处找到: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。谢谢你的帮助。

1 个答案:

答案 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
  }()