2009-11-27 14 views
109

क्या किसी को पता है कि ईवेंट स्टैक या टाइमर स्टैक से पहले से ही कतारबद्ध चयनकर्ता ईवेंट को रद्द करना संभव है (या जो भी तंत्र इसे एपीआई द्वारा उपयोग किया जाता है) जब आप performSelector:withObject:afterDelay पर कॉल करते हैं?कतारबद्ध प्रदर्शन रद्द करने वाला चयनकर्ता: बाद में कॉल

मैं इस ईवेंट स्टैक का उपयोग टैबबार टैब के भीतर किसी छवि के गुणों को बदलने के लिए कर रहा था, और कभी-कभी लूप के लिए एक त्वरित निष्पादित में 10 सेकंड के लायक परिवर्तनों को कतारबद्ध करता था ... शायद 5 मिलीसेकंड या तो।

समस्या तब उत्पन्न होती है जब उपयोगकर्ता टैब स्विच करता है ... जैसा कि कहता है कि मेरे पास छवि के लिए कतारबद्ध छवि परिवर्तन है जो टैब # 4 सक्षम होने पर प्रदर्शित होता है, और फिर उपयोगकर्ता जल्दी से टैब # 3 पर स्विच करता है और फिर टैब # 4 पर वापस ... फिर यह पुरानी कतार अभी भी खेल रहा था, जबकि कतार में लगभग 2 या 3 सेकंड के दौरान 10 सेकंड के लायक बदलावों को फिर से कतारबद्ध किया जाएगा, अगर पर्याप्त तेज़ी से स्विच किया गया हो ... लेकिन यहां तक ​​कि पहुंच रहा है धारा में 5 सेकंड एक समस्या थी।

तो मैं किसी तरह पर एक नया ढेर डालने से पहले परिवर्तन के पुराने ढेर रद्द करने के लिए ...

मैं भूत काल में इस क्वेरी लिख रहा हूँ, क्योंकि मैं पहले से ही इस के लिए एक विकल्प समाधान के साथ आया था की जरूरत प्लेबैक फ़ंक्शन पर एक हॉक-आइड इवेंट फ़िल्टर जोड़कर समस्या। हालांकि मैं अभी भी उत्सुक हूं यदि घटना रद्दीकरण संभव है, क्योंकि मुझे लगता है कि इस तरह का ज्ञान भविष्य में काम में आ जाएगा। प्रदान की गई किसी भी सहायता :) के लिए धन्यवाद

+0

कैसे आप प्लेबैक समारोह पर बाज़ आंखों घटना फिल्टर इस्तेमाल कर सकते हैं? –

उत्तर

227
[NSObject cancelPreviousPerformRequestsWithTarget:] 

या

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:] 

target मूल वस्तु जिस पर performSelector:afterDelay: बुलाया गया था है।

उदाहरण के लिए:

// schedule the selector 
[self performSelector:@selector(mySel:) withObject:nil afterDelay:5.0]; 
// cancel the above call (and any others on self) 
[NSObject cancelPreviousPerformRequestsWithTarget:self]; 

apple docs देखें, यह सही performSelector:withObject:afterDelay: वर्णन के अंत में है।

+33

इसके उपयोग पर कुछ स्पष्टीकरण के लिए, इसे आजमाएं: [NSObject CancelPreviousPerformRequestsWithTarget: self]; – dnstevenson

+2

आपकी टिप्पणी का उपयोग करने के लिए संपादित - धन्यवाद dnstevenson! – Tim

+0

उत्कृष्ट जवाब! – pmk

1

NSRunLoop दस्तावेज़ों की जांच करें। आप चाहते हैं-cancelPerformSelectorsWithTarget:

2

यदि आप "निष्पादनकर्ता" को ढूंढने के लिए "प्रदर्शन चयनकर्ता" ढूंढ रहे हैं ... यह नहीं है।

The, आह, एर, "मिलान" तरीके हैं (ओह, एप्पल, तुम क्यों कि मुझे ??? करने के लिए करते हैं): performSelector cancelPreviousPerformRequestsWithTarget

(बस इसे अतिरिक्त मेहनत याद करने के लिए बनाने के लिए, । डॉक्स खोज के बिना)

2

आदेश सभी पिछले प्रदर्शन अनुरोधों को कैंसिल करने के लिए, आप का उपयोग कर सकते हैं:

[NSObject cancelPreviousPerformRequestsWithTarget:self]; 
संबंधित मुद्दे