委托返回nil,不是在ViewController中,而是在委托创建类时

时间:2019-05-09 15:49:00

标签: ios swift delegates fatal-error

在将我的问题标记为重复之前,请仔细阅读我的问题, 我在应用程序中使用了委托模式,所有与委托相关的代码都可以正常工作。但是现在有一个类在我要描述的地方没有其代表为零。

//protocol class,
protocol CampaignCollectionViewCellDelegate: class {

 func campaignCollectionViewCell(_ Cell: CampaignCollectionViewCell, didContributePressed: UIButton, at indexPath: IndexPath)

 }

 // class where delegate is assigning.

class CampaignCollectionViewCell: UICollectionViewCell {


weak var delegate: CampaignCollectionViewCellDelegate? = .none 

//here i am getting delegate as nil.
@IBAction func didContributeButtonPressed(_ sender: UIButton) {

    if self.delegate != nil {
        self.delegate?.campaignCollectionViewCell(self, didContributePressed: sender, at: self.indexPath)
        }
    }
}

在我的主要课堂上,我正在做这样的事情

@IBOutlet weak var campaignCollectionView: UICollectionView!

viewDidLoad()

campaignCollectionView.delegate = self
campaignCollectionView.dataSource = self

在调试时,我得到的委托不是nil,但其中有一些对象引用,我也尝试过使用这种方式

var campaignVC = CampaignCollectionViewCell()
campaignVC.delegate = self

但是这对我也没有解决,我对所有其他委托方法都做了同样的事情,而且它们运行良好,我不知道为什么它向我展示了这种行为。我已经解决了与代表有关的每个问题,但没有一个对我有用。

1 个答案:

答案 0 :(得分:0)

您在此处创建的该单元格:

var campaignVC = CampaignCollectionViewCell()

与在集合视图中显示的单元格不同。

您需要设置delegate实际显示在集合视图中的单元格,而不仅仅是任何单元格。

在您的cellForItemAt方法中,您可能会调用dequeueReusableCell

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CampaignCollectionViewCell

您应该直接在上述行之后设置委托:

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CampaignCollectionViewCell
cell.delegate = self