मैंने NSTimer काम करने का तरीका जानने के लिए स्विफ्ट में एक प्रैक्टिस प्रोजेक्ट बनाया। टाइमर को प्रारंभ करने के लिए एक बटन है और इसे अमान्य करने के लिए एक बटन है। जब मैं प्रत्येक बटन को एक बार टैप करता हूं तो यह ठीक काम करता है। हालाँकि, जब मैं प्रारंभ टाइमर बटन को कई बार टैप करता हूं, तो मैं इसे अमान्य नहीं कर सकता।

enter image description here

यहाँ मेरा कोड है:

class ViewController: UIViewController {

    var counter = 0
    var timer = NSTimer()

    @IBOutlet weak var label: UILabel!

    @IBAction func startTimerButtonTapped(sender: UIButton) {
        timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)
    }

    @IBAction func cancelTimerButtonTapped(sender: UIButton) {
        timer.invalidate()
    }

    func update() {
        ++counter
        label.text = "\(counter)"
    }
}

मैंने इन प्रश्नों को देखा है, लेकिन मैं उनसे अपने प्रश्न का उत्तर प्राप्त करने में सक्षम नहीं था (कई पुराने Obj-C pre-ARC दिन हैं और अन्य अलग-अलग मुद्दे हैं):

2
Suragch 4 पद 2015, 14:56

2 जवाब

सबसे बढ़िया उत्तर

startTimerButtonTapped में नया टाइमर शुरू करने से पहले आप timer.invalidate() को जोड़ सकते हैं यदि आप हर बार टाइमर को रीसेट करना चाहते हैं तो "स्टार्ट" बटन टैप किया जाता है:

@IBAction func startTimerButtonTapped(sender: UIButton) {
    timer.invalidate()
    timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)
}

मैं एक स्पष्टीकरण के साथ अपडेट करने जा रहा था लेकिन @jcaron ने पहले ही इसे टिप्पणी में कर दिया है, इसलिए मैं सिर्फ अपने पाठ को उद्धृत कर रहा हूं, इसे बदलने की कोई आवश्यकता नहीं है:

हर बार जब आप "स्टार्ट टाइमर" बटन पर टैप करते हैं, तो आप एक नया टाइमर बनाते हैं, जबकि पिछले एक को छोड़ते हुए, लेकिन इसका कोई संदर्भ नहीं है (क्योंकि आपने जो नया टाइमर अभी बनाया है उसके साथ timer ओवरराइट किया है) । नया बनाने से पहले आपको पहले वाले को अमान्य करना होगा।

7
Eric Aya 4 पद 2015, 12:08

मैं आपको रद्द बटन पर प्रेस करने के लिए टाइमर सेट करने के लिए सुझाव देना चाहूंगा। और काउंटर सेट करना न भूलें = 0 जब टाइमर को अमान्य किया जाए।

0
Devang Tandel 4 पद 2015, 18:17