2009-10-28 11 views
28

मेरे पास ऐसा कुछ है:एनएसटीमर सक्रिय है या नहीं, तो कैसे पता लगाएं?

 NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                target:self 
               selector:@selector(updateCountdown) 
               userInfo:nil 
                repeats:YES]; 

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

उत्तर

67

जब एक गैर-दोहराने वाला टाइमर आग लगाता है तो यह स्वयं को अमान्य के रूप में चिह्नित करता है ताकि आप यह जांच सकें कि यह अभी भी इसे रद्द करने से पहले वैध है (और निश्चित रूप से इसके बाद आप इसे मुक्त कर रहे हैं)।

if ([timer isValid] && yourOtherCondition){ 
    [timer invalidate], timer=nil; 
} 

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

+0

बहुत बढ़िया उदाहरण! धन्यवाद – Genevios

5

टाइमर को एक आवृत्ति चर में रखें, और कोई टाइमर चलने पर timer = nil सेट करें (यानी [timer invalidate] पर कॉल करने के बाद)। फिर, यह जांचने के लिए कि टाइमर सक्रिय है या नहीं, आप जांच सकते हैं कि timer == nil है या नहीं।

1

स्विफ्ट में, आप इसका उपयोग कर सकते हैं isValid बूलियन यदि टाइमर चल रहा है देखने के लिए:

if timer.isValid { 
    // Do stuff 
} 

Apple docs से:

एक बूलियन मान कि यह दर्शाता है कि रिसीवर वर्तमान में मान्य है। (केवल पढ़ने के लिए)

सत्य अगर रिसीवर अभी भी फायरिंग या झूठी करने में सक्षम है यदि टाइमर अमान्य है और अब फायरिंग करने में सक्षम नहीं है।

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

  • कोई संबंधित समस्या नहीं^_^