委托从一个objc快速到解雇模态视图

时间:2015-05-22 11:35:17

标签: objective-c swift delegates

我有一个objc uiviewcontroller,可以在模态中对swift uiviewcontroller执行segue。我在objc文件中创建委托,但我无法从swift文件中调用objc中的方法。所有文件接缝都没问题,但是当调用delegate.function时,我在swift文件中给出了一个错误的exec。

objc

 #import "Cliente-Swift.h"
 @interface ViewController () <gameDelegate>
 @end

  (...)

   else if ([[segue identifier] isEqualToString:@"segueToGame"]) {
        //jump to main vgame controller
        GameViewController *gameVC =  [segue destinationViewController];
        gameVC.mydelegate = self;
    }

swift GameViewController

@objc protocol gameDelegate {
   func dismissGame()
}

class GameViewController: UIViewController {

var mydelegate: gameDelegate! = nil

override func viewDidLoad() {
    super.viewDidLoad()
    let scene = MainMenuScene(size:CGSize(width: 1536, height: 2048))
    //let scene = GameScene(size:CGSize(width: 1536, height: 2048))

    let skView = self.view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.showsPhysics = true;
    skView.ignoresSiblingOrder = true
    scene.scaleMode = .AspectFill
    skView.presentScene(scene)
}


override func prefersStatusBarHidden() -> Bool {
    return true
}


func sairDoJogo() {

    print("mydelegate = \(mydelegate!)")


    mydelegate!.dismissGame()

坏exec是调用objc函数dismissGame的地方

2 个答案:

答案 0 :(得分:0)

我怀疑,mydelegate并未真正设定。 您应该通过添加日志输出来检查mydelegate中是否确实设置了prepareForSegue:... :(您的segue ID是否正确?)

else if ([[segue identifier] isEqualToString:@"segueToGame"]) {
    //jump to main vgame controller
    NSLog(@"Setting game delegate");
    GameViewController *gameVC =  [segue destinationViewController];
    gameVC.mydelegate = self;
}

GameViewController中,您可以在致电mydelegate之前检查nildismissGame(),还是仅使用? :(正如您所声明的那样) mydelegategameDelegate!,您的通话中的!不是必需的,因为它“隐含在那里” - 但您仍然可以使用mydelegate?.dismissGame()

    if mydelegate != nil {
        mydelegate.dismissGame()
    }

    mydelegate?.dismissGame()

(我对一个示例项目进行了快速测试,并且mydelegate未初始化导致您所描述的错误。)

答案 1 :(得分:0)

感谢您的回答。我知道了。没有任何关于授权,或objc和快速整合。代表很好,其余的都是。问题是当我意识到我解决问题时,我是如何从spritekit场景回调uiviewcontroller的。再次感谢