委托协议不起作用,返回nil

时间:2015-03-14 14:12:35

标签: xcode swift delegates protocols

我正在尝试在swift中使用协议/委托,虽然我没有收到任何错误,但似乎我的委托没有被创建。它对我不利,我不知道为什么。

这是我的代码

第1类

import UIKit

protocol GameViewSliding{
    func slideGameView()
}

class GameDetailsViewController: UIViewController {
var delegate:GameViewSliding?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func showOptions(sender: AnyObject) {

    println("button pressed")
    println(delegate)
    delegate?.slideGameView()
}

}

符合协议的第2类

import UIKit

var currentHoleNumber:Int = 0
var parThree = false;
var parFive = false;

class GameViewController: UIViewController,  GameViewSliding{


var gameDetailsVC:GameDetailsViewController = GameDetailsViewController()
override func viewDidLoad() {
    super.viewDidLoad()

    println("inside the game class")
    gameDetailsVC.delegate = self
}

func slideGameView(){
    println("this is from the root controller")
}

}

1 个答案:

答案 0 :(得分:1)

问题很可能出在这里没有显示的代码中。在prepareForSegue中,您通常希望在目标视图控制器上设置委托。

基本上,您是在要创建的类的实例上设置它,但这不是实际显示的实例。因此,显示的实例没有委托。

删除第二个控制器的本地var,并且视图中委托的设置确实已加载,只需将其设置在目的地上以准备segue,我敢打赌它将完美运行。