2015-04-10 24 views
5

gönderilen bir NSTimer seçicinin içine koyun.Swift seçici tanınmayan seçici bir işleve sahip örneğine

var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "runRockRotation()", userInfo: rock, repeats: false) 
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "runRockRotation(_)", userInfo: rock, repeats: false) 
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "runRockRotation", userInfo: rock, repeats: false) 

Ayrıca nil kullanarak kaya olmadan çalıştı, ama işe yaramış görünüyor:

var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "runRockRotation:", userInfo: rock, repeats: false) 

forumlarda bir sürü Oku Bu çalıştı.

Her zaman olsun:

2015-04-10 15:49:03.830 Meh[1640:218030] -[__NSCFTimer runAction:completion:]: unrecognized selector sent to instance 0x174166840 
2015-04-10 15:49:03.832 Meh[1640:218030] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFTimer runAction:completion:]: unrecognized selector sent to instance 0x174166840' 

nasıl bir parametreye sahip bir selektör benim işlevini denir? Bunu Objective C'de nasıl yapacağımı biliyorum, ancak Swift'de bunu yapamıyorum. Tüm yardımlar takdir edilecektir.

+0

Zamanlayıcıyı nerede arıyorsun? Zamanlayıcı, runRockRotation tanımladığınız sınıfta mı oluşturuldu? Hedef olarak "kendini" geçirirsin, belki de ihtiyacın olan bu değil? – Chackle

+0

kullanımı: "selektör:" runRockRotation: "' – duan

cevap

8

Kontrol scheduledTimerWithTimeInterval

belgeleri Sen

seçici aşağıdaki imzası olması gerektiğini göreceksiniz: timerFireMethod: (yöntem bir argüman aldığını belirten iki nokta üst üste dahil). Uygun seçici bulunamaz böylece - (void)timerFireMethod:(NSTimer *)timer

İşleviniz bu kalıba uymayan:

zamanlayıcı böylece yöntem aşağıdaki deseni uyarlamak istiyorum, argüman olarak kendisini geçer. gibi

Kullanım şey -

func runRockRotationForTimer(_ timer: NSTimer){ 
    self.runRockRotation(timer.userInfo as? SKSpriteNode) 
    timer.invalidate(); 
} 

ve

var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "runRockRotationForTimer:", userInfo: rock, repeats: false) 
+0

FWIW Ayrıca, benim func genel yapmak zorunda kaldı – dbro

2

Ayrıca emin hedef nesneyi (sizin durumunuzda öz) hale getirmeye yardımcı olur kullanarak planlamak

var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: <THIS MUST BE NSOBJECT SUBCLASS>, selector: "runRockRotation:", userInfo: rock, repeats: false) 
NSObject

bir alt sınıfıdır
İlgili konular