2011-02-15 25 views
6

Gecikmeli seçicileri tek tek iptal edebilmek istiyorum. Onun [NSObject cancelPreviousPerformRequestsWithTarget...] ile yapabilirim ama bunu yapmak için tüm yöntem parametrelerine ihtiyaç duyarım. İptal etmek istediğim noktada, onlara sahip değilim.performSelector: withObject: afterDelay: ile ertelenen seçmenlerin listesini alabilir miyim?

Seçicileri ertelemek için kullanılan parametrelerle birlikte geciktirilen seçmenlerin listesini almanın bir yolu var mı?

Buradaki geçici çözüm, elbette parametrelerin izini tutmaktır. Veya GCD'u kullanmak ve hemen dönüp dönmeyeceklerini görmek için seçicilerimi (şimdi blokları) kontrol et.

cevap

0

doğrudan değil. Bunu başarmanın kolay bir yolu NSOperation'ı kullanmaktır - daha sonra gelecekte iptal etmeniz gereken işlemlere referanslar tutun.

+0

Mento'yu Unuttum: Bu kod, arayüzün bir parçasını kullanıyor, bu yüzden ana parçacığı üzerinde tutmam gerekiyor. Bu yüzden NSOperation'ı karışıma eklemedim. –

+0

hmmm ... bunu başarmak için bir şeyler yazmanız gerekecek gibi görünüyor, çünkü OP'de bahsettiğiniz seçeneklere ek olarak, ana çalışma döngüsüne kayıt olabilirsiniz (CF API'lerine gitmeniz gerekebilir)) ve sonra ileti sırası için NSInvocations kullanın. Alternatif olarak, davetleri gruplamak için bir sarıcı türü oluşturabilir, daha sonra bilinmeyen parametreler olmadan 'cancelPreviousPerformRequestsWithTarget' komutunu kullanabilirsiniz. Son olarak, bu mesajlar 'isEqual:' yi uygulayan özel bir türle çağrılabilir. daha sonra hangi mesajların iptal edileceğini tanımlamak için isEqual'in özel bir uygulamasını kullanabilirsiniz. – justin

İlgili konular