2015-04-10 17 views
5

के लिए भेजा मैं एक समारोह है:स्विफ्ट चयनकर्ता - अपरिचित चयनकर्ता उदाहरण

func runRockRotation(rockSprite: SKSpriteNode){ 
    startRockRotationAnimation(rockSprite, isRock: true) 
} 

जब मैं इसे इस तरह कहते हैं:

runRockRotation(rock) 

यह काम करता है, लेकिन मैं करने में सक्षम हो नहीं कर पा रहे इसे एनएसटीमर चयनकर्ता के अंदर रखें।

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) 
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "runRockRotation", userInfo: rock, repeats: false) 

इसके अलावा, नहीं के बराबर का उपयोग कर चट्टान के बिना की कोशिश की,, लेकिन कुछ भी काम करने के लिए लगता है।

हर बार जब मैं:

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' 

मैं कैसे एक पैरामीटर के साथ एक चयनकर्ता में मेरी समारोह कहते हैं? मुझे पता है कि उद्देश्य सी में ऐसा कैसे करें, लेकिन स्विफ्ट में ऐसा नहीं लगता है। सभी मदद की सराहना की जाएगी।

+0

आप टाइमर कहां कॉल कर रहे हैं? क्या आपके द्वारा चलाए गए वर्ग में टाइमर बनाया जा रहा है RockRotation परिभाषित किया गया है? आप लक्ष्य के रूप में "स्वयं" पास करते हैं, हो सकता है कि आपको वह चाहिए जो आपको चाहिए? – Chackle

+0

उपयोग: 'चयनकर्ता:" runRockRotation: "' – duan

उत्तर

8

चेक के लिए scheduledTimerWithTimeInterval

प्रलेखन आपको लगता है कि

चयनकर्ता निम्नलिखित हस्ताक्षर होना चाहिए देखेंगे: timerFireMethod: (संकेत मिलता है कि विधि एक तर्क लेता है एक कॉलन सहित)।

टाइमर तर्क के रूप में ही गुजरता है, इस प्रकार विधि निम्नलिखित पैटर्न को अपना लिया:, - (void)timerFireMethod:(NSTimer *)timer

आपका समारोह इस पैटर्न से मेल नहीं खाता तो उचित चयनकर्ता नहीं पाया जा सकता है।

कुछ

उपयोग की तरह -

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

और का उपयोग कर

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

FWIW मुझे भी अपना func सार्वजनिक करना पड़ा – dbro

2

भी सुनिश्चित करने के लिए लक्ष्य वस्तु (आपके मामले में आत्म) में मदद करता है यह अनुसूची NSObject

की
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: <THIS MUST BE NSOBJECT SUBCLASS>, selector: "runRockRotation:", userInfo: rock, repeats: false) 
एक उपवर्ग है
संबंधित मुद्दे