【问题标题】:Swift - separate views have subviews that are sharing the same memory?Swift - 单独的视图有共享相同内存的子视图?
【发布时间】:2018-01-14 08:27:49
【问题描述】:

Swift 新手。我有一个来自一个视图控制器的嵌套 CollectionView。主视图控制器有 7 个collectionviewcell(下面代码中的“Level1Cell”)。每次单击按钮或触发事件时,我都希望 collectionView 重新加载新数据。

func eventHandler() {
// updates data
myCollectionView.reloadData()

}

然后,在它调用 reload 之后,它会在每个嵌套的 CollectionViewCell 上再次调用 reload。

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Level1Cell", for: indexPath) as! Level1Cell
    cell.appsCollectionView.reloadData()
    return cell
}

问题是,假设我想为第一个单元格设置一些文本的特定行。

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {                
   if(self.index == 0  && indexPath.row == 30){
        rightCell.textLabel.text = "asdasd"
    }

第四个“Level1Cell”单元格的标签也设置在第 30 行,但不是第二和第三行。单步执行调试器后,我意识到单元在重新加载后,第四个单元“Level1Cell”设置为与第一个单元具有相同的内存地址(为什么重新加载这样做 - 它不应该为每个“Level1Cell”? - 我怎样才能解决这个问题)。另外,我不应该使用重新加载来更新视图和视图控制器中的嵌套视图中的数据吗?

谢谢!

【问题讨论】:

    标签: ios iphone swift memory uicollectionview


    【解决方案1】:

    UIcollectionview 将重用单元格。您必须为方法中的行提供所需的数据

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    

    或者只是清除单元格中以前的数据。

    【讨论】:

    • 提供数据是什么意思。我设置了rightCell.textLabel.text。在“leve1Cell”的情况下,我也做了cell.data = xyz,但是这里没有放。
    • 我的意思是,如果您没有在某个索引路径的单元格中设置新标签或没有删除旧标签,它们将包含旧数据
    • 所以在单步调试我的调试器之后,Level1Cell 具有相同的内存地址。每次都应该出队分配新的内存。但是调用 reload 会重用先前单元格的内存吗?
    • 不记得了。 UICollectionView 一直使用上一个单元格。甚至在重新加载数据之前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2018-03-08
    • 2014-12-10
    相关资源
    最近更新 更多