SORU
16 Temmuz 2009, PERŞEMBE


Sınıf yöntemi-respondsToSelector eşdeğeri:

Sınıf yöntemi -respondsToSelector: eşdeğer var mı?

respondsToSelector: gibi bir şey mi?

Neden soruyorum, çünkü bir uygulama -respondsToSelector: bir sınıf düzeyinde, bir derleyici uyarı: "'- respondsToSelector:' yerine ' respondsToSelector:' in protocol(s)".

Kod bu gibi görünüyor:

Class <SomeProtocol> someClass = [someInstance class];

if ([someClass respondsToSelector:@selector(someSelector:)]) {
    someVar = [someClass someSelector:someData];
}

CEVAP
16 Temmuz 2009, PERŞEMBE


Düzenle gördükten sonra güncelleme:

Bir sınıf nesnesi, sizin de fark ettiğiniz gibi respondsToSelector: çok iyi yanıt verir. Test uygulamasında, herhangi bir derleyici bir uyarı olmadan her birini yapabilirim:

NSLog(@"Responds to selector? %i", [MyObject respondsToSelector:@selector(respondsToSelector:)]);
NSLog(@"Responds to selector? %i", [[MyObject class] respondsToSelector:@selector(respondsToSelector:)]);

Ancak, değişken bir protokol beyan ettiniz, sınıfı uygular için bu yöntemleri işaret eden bir nesne olduğunu kabul eder. En basit çözüm respondsToSelector: arama amaçlı id someClass dökme olacaktır. Biraz daha temiz bir çözüm respondsToSelector:(SEL)selector, eder @protocol kendi ilan etmek ve sonra da şöyle: someClass ilan olurdu

Class<SomeProtocol, ClassRespondingToSelector> someClass = ...

Son olarak, emin http://bugreporter.apple.com Apple ile ilgili bir hata dosyası. Yaptığın şey çok açık o yüzden bu kadar basit bir test uygulaması vardır. Eğer onları düzeltmeleri öncelik yardımcı olur, geçmişte olduğu gibi teslim oldum bile, bu tür hata raporları bekliyoruz.

Son bir not: bu, teoride, bir kök nesne bu durumda NSObject, ve tamamen ayrı uygulamak için seçtiğiniz yüzünden oluyorolmaz-respondsToSelector: yanıt. -[NSObject respondsToSelector:] aslında NSObject protokolde, sınıf tanımı bildirilmedi. NSObject protokol NSObject olarak bildiklerimizin çoğu aslında yaşadığı yeri aslında. respondsToSelector: de orada olması gerektiğini iddia olabilir, ama şu anda değil. Ve protokol listesi verdik, ve bu yöntem orada olmadığına göre, sen ne yaptığını biliyor emin olmak için bir uyarı verir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006