2014-11-23 10 views
7

मैं एक ऐप विकसित करने की कोशिश कर रहा हूं जिसमें एक साधारण स्टॉपवॉच सुविधा शामिल है। मैं एक्सकोड 6 और स्विफ्ट भाषा का उपयोग कर रहा हूं। यहाँ FirstViewControllerअज्ञात चयनकर्ता उदाहरण के लिए भेजा गया NSTimer स्विफ्ट

@IBAction func Stopwatch (Sender:UIButton) { 

var startTime = NSTimeInterval() 

    func updateTime(timer:NSTimer) { 

     //Find Current TIme 

     var currentTime = NSDate.timeIntervalSinceReferenceDate() 

     //Find the difference between current time and start time 

     var elapsedTime :NSTimeInterval = currentTime - startTime 

     //calculate the minutes in elapsed time. 
     let minutes = UInt(elapsedTime/60.0) 
     elapsedTime -= (NSTimeInterval(minutes) * 60) 

     //calculate the seconds in elapsed time. 
     let seconds = UInt(elapsedTime) 
     elapsedTime -= NSTimeInterval(seconds) 

     //find out the fraction of milliseconds to be displayed. 
     let hours = UInt(elapsedTime * 100) 

     let strMinutes = minutes > 9 ? String(minutes):String(minutes) 
     let strSeconds = seconds > 9 ? String(seconds):String(seconds) 
     let strHours = hours > 9 ? String(hours):String(hours) 

     //assign text to Label 
     elapsedTimeLabel.text = "You have slept for \(strHours)" 
    } 

    //Timer 
    var timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("updateTime:"), userInfo: nil, repeats: true) 
    startTime = NSDate.timeIntervalSinceReferenceDate() 

} 
} 

हर बार जब मैं अनुप्रयोग चलाने (आईओएस सिम्युलेटर के भीतर) में कोड है, ऐप्लिकेशन क्रैश जब मैं बटन दबाएँ (निष्पादित स्टॉपवॉच समारोह)। त्रुटि हमेशा

2014-11-23 11:44:53.617 Sleep[9630:644637] -[Sleep.FirstViewController updateTime:]: 
unrecognized selector sent to instance 0x7ff6d9676e80 
2014-11-23 11:44:53.622 Sleep[9630:644637] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '-[Sleep.FirstViewController updateTime:]: unrecognized 
selector sent to instance 0x7ff6d9676e80' 
*** First throw call stack: 

मुझे नहीं पता कि यह क्यों हो रहा है और मैं आईओएस प्रोग्रामिंग के लिए काफी नया हूं, इसलिए कृपया मदद करें!

उत्तर

0

आपने updateTime को स्थानीय फ़ंक्शन के रूप में Stopwatch पर परिभाषित किया है, इसलिए यह इसके दायरे से बाहर उपलब्ध नहीं है। सुलभ होने के लिए आपको कक्षा स्तर (Stopwatch के समान) पर ले जाना चाहिए।

मुझे नोटिस है कि कुछ स्थानीय चर हैं जो शायद उदाहरण गुण हो सकते हैं।

14

अपडेटटाइम एक क्लास विधि बनने दें।
और अगर यह एक शुद्ध स्विफ्ट कक्षा में है कि आप की तरह @objc साथ कि विधि की घोषणा प्रस्तावना करना होगा:

class A { 
    @objc func updateTime(timer:NSTimer) { 

    } 
} 
+2

@objc ध्वज की आवश्यकता नहीं है, कम से कम स्विफ्ट 1.2 के रूप में। हालांकि, मैं एक ही त्रुटि में भाग गया क्योंकि मेरा चयनकर्ता हस्ताक्षर गलत था। एनएसटीमर प्राप्त करने के लिए इसे स्थापित करने की आवश्यकता है। जैसे 'func mySelector (टाइमर: एनएसटीमर) ' –

0

एक और संभावना है: सुनिश्चित करें कि आपके चयनकर्ता काम नहीं करेगी throw बनाने के लिए, के रूप में है, जो आपको दे देंगे एक अपरिचित चयनकर्ता अपवाद:

func mySelector(timer: NSTimer) throws { 
} 
संबंधित मुद्दे

 संबंधित मुद्दे