2016-11-19 2 views
0

Когда я запустить функциюNSInvalidArgument исключения при использовании #selector swift3

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]: непризнанный селектор отправлен в пример ...

Обе указанные функции находятся в подклассе SKScene, работающем в Swift3.

В частности, я не получаю компиляции ошибки времени в отличие от #selector(test)

ответ

0

Вы сделали ошибку в настройке target с Boolean значением.

target - это объект, для которого отправляется сообщение, заданное aSelector при срабатывании таймера. Таймер поддерживает сильную ссылку на цель, пока он (таймер) не будет признан недействительным.

Так просто установить target к self если метод существует в классе, где планирование Timer.

let shootTimer = Timer.scheduledTimer(timeInterval: bulletInfo.frequency, target: self, selector: #selector(shootBullet), userInfo: nil, repeats: true) 
Смежные вопросы