使用#selector swift3时出现NSInvalidArgument异常

时间:2016-11-19 04:32:47

标签: swift swift3 selector nstimer unrecognized-selector

当我运行该功能时

func makeSpriteShoot(bullets bulletInfo:MHBulletInformation,player playerSprite:SKSpriteNode){
    print("Foo")
    let shootTimer = Timer.scheduledTimer(timeInterval: bulletInfo.frequency, target: true, selector: #selector(shootBullet), userInfo: nil, repeats: true)
}
func shootBullet(){
    player.shootBullet(angle: 90)//player is a instance of a subclass of SKSpriteNode
}

我收到以下异常+ SIGABRT:

  

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFBoolean shootBullet]:无法识别的选择器发送到实例...

上述两个函数都在Swift3中运行的SKScene的子类中。

值得注意的是,与#selector(test)

不同,我没有得到任何编译时错误

1 个答案:

答案 0 :(得分:0)

您在target设置Boolean值时犯了错误。

  

target是定时器触发时发送aSelector指定的消息的对象。计时器保持对目标的强引用,直到它(计时器)无效。

如果您在安排target的课程中存在方法,只需将self设置为Timer

let shootTimer = Timer.scheduledTimer(timeInterval: bulletInfo.frequency, target: self, selector: #selector(shootBullet), userInfo: nil, repeats: true)