单元格变量为 nil,其中设置了值 collectionview 索引路径

Posted

技术标签:

【中文标题】单元格变量为 nil,其中设置了值 collectionview 索引路径【英文标题】:cell variable is nil where value was set collectionview index path 【发布时间】:2017-01-17 10:34:19 【问题描述】:

我花了很多时间 .. 但我不知道为什么它不工作 .. 调用索引路径的单元格并正确设置值,但单元格类我发现 nil 值 .. 如果您需要任何信息,请告诉我知道。

在我的 collectionview 索引路径中

在集合视图单元格中

这是我的代码:

对于收藏视图:

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: menuBarItemDetailId, for: indexPath) as! MenuBarItemDetail
        cell.shopCategory = "600"
        print(cell.shopCategory)
        return cell
    

对于单元格:

class MenuBarItemDetail: UICollectionViewCell , UITableViewDataSource , UITableViewDelegate 
    var shopCategory : String?

    override init(frame: CGRect) 
        super.init(frame: frame)

         print("shopCategory :-> ...i am calling from cell :\(shopCategory)")

【问题讨论】:

取可选值使用 print(cell.shopCategory)! 是的!我已经完成了,请检查第一张图片但没有结果..你是说那个吗 @Lalitkumar 是的可选值将其用作我的第一张图片 @cristanlika 在单元格类 UITableViewDataSource , UITableViewDelegate 中不需要这些,因为这是集合视图单元格,因此您需要将所有代表放入视图控制器并删除初始化函数。没必要。你可以使用 awakeFromNib 【参考方案1】:

因为您的 awakeFromNib 方法首先被调用,然后是 cellForRow 。您在 cellForRow 中分配变量的值,所以当第一个项目执行时,它的值是 nil

解决方案

    自定义单元格中的变量

    var myVar : String?
    

    在您的自定义单元类中创建一个方法

    func myMethod(str : String)
        myVar = str
        print("var : \(myVar)")        
    
    

    cellForItem,像这样调用你的函数

    cell.myMethod(str: "343")
    

输出

【讨论】:

首先我没有在我的项目中的任何地方使用 awakeFromNib 第二如果是这样,那是什么解决方案。你能指导我做什么吗? Init方法也先调用了,看看吧。 是的,似乎。我能做些什么 ?请问有什么解决办法 @cristanlika 用我得到的输出检查解决方案。如果它对您有用,请接受答案并投票,否则请写下您的问题。【参考方案2】:

当你写作时

let cell = collectionView.dequeueReusableCell(withReuseId`entifier: "MenuBarItemDetail", for: indexPath) as! MenuBarItemDetail`

当时调用了“override init(frame:CGRect)”。 并且在初始化时没有为 shopCategory 分配任何值,这就是您得到 nil 的原因。

在 MenuBarItemDetail 中添加一个函数“getShopCategory”,当您想要访问 shopCategory 的值时,您可以使用 getShopCategory 函数来获取它。

import Foundation
import UIKit

    class MenuBarItemDetail: UICollectionViewCell  
        var shopCategory : String?

        func  getShopCategory()  
         print("shopCategory :-> ...i am calling from cell :\(shopCategory)")
        


    

控制器类

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MenuBarItemDetail", for: indexPath) as! MenuBarItemDetail
        cell.shopCategory = "600"
        print(cell.shopCategory)
        cell.getShopCategory()
        return cell
    

cell 是 MenuBarItemDetail 的当前实例,因此它将返回 shopCategory 的指定值

如果它对你有用,请告诉我。 谢谢

【讨论】:

以上是关于单元格变量为 nil,其中设置了值 collectionview 索引路径的主要内容,如果未能解决你的问题,请参考以下文章

iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil

自定义单元格:致命错误:在展开可选值时意外发现 nil

Swift Cocoa Touch 自定义单元格为 IBOutlets 返回 nil

试图从 UITableView 返回选定的单元格,但它只返回 nil

尽管我以编程方式选择了一个单元格,但 indexPathForSelectedRow 返回 nil

将文本设置为自定义表格单元格标签时崩溃