делегат возвращает ноль, даже если установлено на себя - PullRequest
0 голосов
/ 01 мая 2018

У меня есть ViewController, который имеет CollectionView из двух ячеек. Одна из ячеек (LoginView) имеет кнопки входа в систему, которые я хочу, чтобы ViewController обрабатывал. Ошибка, которую я получаю, является неожиданным нулем, даже если для делегата установлено значение self в WelcomeViewController.

ViewController

    class WelcomeViewController: UIViewController, SomeDelegate ... {

            func createCollectionView(){
                 let loginView = LoginView()
                 loginView.delegate = self

                 //collectionView related stuff here
                 ...
            }
        ...
            override func viewDidLoad() {
                 super.viewDidLoad()
                 createLayer()
                 createCollectionView()
            }
        ...
            func didPressFacebook() {
                print("pressed")
            }
    }

Протокол выглядит примерно так

protocol SomeDelegate {
    func didPressFacebook()
}

и вид выглядит примерно так

class LoginView: UICollectionViewCell, ConfigurableCell {

    var reuseId: String {
        get {
            return "loginView"
        }
    }

    var delegate : LoginButtonHandlerDelegate!

    //Create other view related stuff here
    ...

    let facebookButton = SocialButton(buttonType: .facebook)
    let googleButton = SocialButton(buttonType: .google)

    override init(frame: CGRect) {
        super.init(frame: frame)
        facebookButton.addTarget(self, action: #selector(didPressLogin), for: .touchUpInside)

       //Add subviews and other relatedstuff here
        ...
    }

    ...

    @objc func didPressLogin(){
        if (facebookButton.buttonIs == "facebook") {
            delegate.didPressFacebook()
        }
    }
}

1 Ответ

0 голосов
/ 01 мая 2018

из кода, который я вижу: var delegate : LoginButtonHandlerDelegate! должно быть var delegate : SomeDelegate!

...