4
respostas

Delegate = nil

Estou tentando usar o delegate pra chamar minha função buscaCodigo, mas o delegate esta vindo como nulo, oq estou fazendo de errado?

import UIKit

protocol buscaCodigoDelegate {
    func buscaCodigo(code: String)
}

class ViewController: UIViewController {

    @IBOutlet var codeField: UITextField!

    var delegate:buscaCodigoDelegate?

    @IBAction func btnBuscar() {

        if codeField == nil {
            return
        }

        let code = codeField.text

        print(delegate)
        if delegate == nil {
            return
        }

        print(code)
        delegate!.buscaCodigo(code!)

    }
}
import UIKit

class CodeViewController: UIViewController, buscaCodigoDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "SegueViewController") {
            let view = segue.destinationViewController as! ViewController
            view.delegate = self
        }
    }

    @IBOutlet var codigoLabel: UILabel!

    func buscaCodigo(code: String) {
        if code == " " {
            return
        }
        codigoLabel.text = code

    }

}
4 respostas

Oi Augusto, tudo bom?

Provavelmente seu código não está entrando no if abaixo:

if (segue.identifier == "SegueViewController") {
    let view = segue.destinationViewController as! ViewController
    view.delegate = self
}

Dá uma conferida se a segue está com o identificador com o nome SegueViewController certinho.

Abraço!

Joviane, obrigado pela resposta, verifiquei o identificador da segue e está correta, até coloquei alguns prints pra verificar mas ele nem chama a função de prepareForSegue, segue os print que inclui e ele só me retornou "1". ele entrou só no viewDidLoad

import UIKit

class CodeViewController: UIViewController, buscaCodigoDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        print("1")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        print("2")
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "SegueViewController") {
            print("3")
            let view = segue.destinationViewController as! ViewController
            view.delegate = self
        } else {
            print("4")
        }
    }

    @IBOutlet var codigoLabel: UILabel!

    func buscaCodigo(code: String) {
        if code == " " {
            return
        }
        codigoLabel.text = code

    }
}

nenhuma dica? ainda não consegui resolver... ja até refiz o projeto mas continua com a mesma coisa :/

Oi Augusto,

Quando você clica no botão vinculado a esta segue o que acontece? Me passa o link do github do seu projeto para eu dar uma olhada?

Não consegui reproduzir o seu erro.

Abraço!