तो मूल रूप से, मेरे पास यह टाइमर है जिसे दोहराया जाना चाहिए जब इसे एक महत्वपूर्ण ईवेंट प्राप्त होता है, और जब उपयोगकर्ता कुंजी जारी करता है तो उसे अमान्य कर दिया जाता है। हालांकि, मैं NSRunLoop में addTimer:forMode:
पर कॉल करके भी टाइमर को "मान्य" करने में असमर्थ हूं। क्या कोई जानता है कि यह क्यों हो रहा है और मैं इसे कैसे ठीक कर सकता हूं? धन्यवाद।इसे अमान्य करने के बाद एनएसटीमर को "मान्य" कैसे करें?
उत्तर
आप अवैध टाइमर का उपयोग नहीं कर सकते हैं।
एप्पल डॉक्स से:
एक बार एक रन पाश पर निर्धारित, निर्दिष्ट अंतराल पर टाइमर आग जब तक यह अवैध है। एक गैर-दोहराने वाला टाइमर आग लगने के तुरंत बाद को अमान्य करता है। हालांकि, दोहराने वाले टाइमर के लिए, आप को अपनी अमान्य विधि को कॉल करके टाइमर ऑब्जेक्ट को स्वयं अमान्य करना होगा। इस विधि को कॉल करने से टाइमर को वर्तमान रन लूप से हटाने का अनुरोध किया गया है; नतीजतन, आपको हमेशा उसी थ्रेड से अमान्य विधि को कॉल करना चाहिए जिस पर टाइमर स्थापित किया गया था। टाइमर को अमान्य करने से तुरंत इसे अक्षम कर दिया जाता है ताकि यह रन लूप को प्रभावित न करे। रन लूप तब टाइमर को हटा देता है और रिलीज़ करता है, या तो अमान्य विधि रिटर्न से पहले या कुछ बाद के बिंदु पर। एक बार अवैध हो जाने पर, टाइमर ऑब्जेक्ट का पुन: उपयोग नहीं किया जा सकता है।
एक बार जब आप एनएसटीमर को अमान्य कर देते हैं, तो आपको इसे फिर से उपयोग नहीं करना चाहिए।
इसके बजाय, एक नया टाइमर उदाहरण बनाएं, और उस उदाहरण का उपयोग NSRunLoop की addTimer विधि में जोड़ने के लिए करें। व्यक्तिगत रूप से मैं बस एनएसटीमर के शेड्यूल टाइमर विथटाइम इंटरवल को कॉल करना पसंद करता हूं क्योंकि यह सब कुछ एक शॉट में करता है।
NSTimer docs से:
कॉलिंग इस विधि वर्तमान रन पाश से टाइमर हटाने का आग्रह किया; नतीजतन, आपको हमेशा उसी थ्रेड से अमान्य विधि पर कॉल करना चाहिए जिस पर टाइमर स्थापित किया गया था। अमान्य टाइमर तुरंत इसे अक्षम करता है ताकि यह अब लूप को प्रभावित न करे। रन लूप तब अमान्य विधि रिटर्न या कुछ बाद के बिंदु से पहले टाइमर को हटा देता है और रिलीज़ करता है, या तो । एक बार अवैध हो जाने पर, टाइमर ऑब्जेक्ट का पुन: उपयोग नहीं किया जा सकता है।
ठीक है, मुझे यह नहीं पता था ... धन्यवाद! – TheAmateurProgrammer
दिलचस्प बात यह है कि NSRunLoop addTimer है लेकिन कोई निकालने वाला टाइमर नहीं है जो बिना किसी अमान्य किए फायरिंग से टाइमर को रोक सकता है। यह होना चाहिए कि बंदरगाहों का निर्माण बंदरगाहों के निर्माण से सस्ता है ताकि ऐप्पल उस एपीआई को जोड़ने से परेशान न हो। –