Aktualizacja po obejrzeniu Twoja edycja:
Obiekt klasy reaguje na respondsToSelector:
dobrze, jak zapewne wiesz. W aplikacji testowej, można zrobić zarówno z poniższych bez żadnych ostrzeżeń kompilatora:
NSLog(@"Responds to selector? %i", [MyObject respondsToSelector:@selector(respondsToSelector:)]);
NSLog(@"Responds to selector? %i", [[MyObject class] respondsToSelector:@selector(respondsToSelector:)]);
Jednak już ogłoszony protokół o zmiennej, więc zakłada, że obiekt klasy jesteś wskazując realizuje te metody. Najprostszym rozwiązaniem byłoby obsłużenie someClass
jako id
w celu wywołania respondsToSelector:
. Nieco czystsze rozwiązanie byłoby zadeklarować swój własny @protocol
który deklaruje +respondsToSelector:(SEL)selector
, a następnie zadeklarować someClass
następująco:
Class<SomeProtocol, ClassRespondingToSelector> someClass = ...
Wreszcie, należy zgłosić błąd z Apple na http://bugreporter.apple.com. Dołącz prostą aplikację testową, aby było jasne, co robisz. Przyjmują takie raporty o błędach, nawet jeśli zostały zgłoszone w przeszłości, ponieważ pomagają im ustalać priorytety poprawek.
Ostatnia uwaga: jest to prawdopodobnie dzieje, ponieważ w teorii, można wybrało do realizacji przedmiotu głównego całkowicie oddzielone od NSObject iw tym przypadku, to nie reagować na -respondsToSelector:
. -[NSObject respondsToSelector:]
jest faktycznie zadeklarowany w protokole NSObject
, a nie definicji klasy. Protokół NSObject
jest w rzeczywistości miejscem, gdzie żyje się większość tego, co znamy jako NSObject
. Można by się spierać, że powinno tam być także +respondsToSelector:
, ale na razie nie jest. A ponieważ dostarczyłeś listę protokołów, a ta metoda nie istnieje, daje ci ostrzeżenie, abyś wiedział, co robisz.
Wierzę, że w tym przypadku rzeczywiście chciałby rzucić na Class, a nie id. –
To jest albo usunięta funkcja, albo odpowiedź jest niejasna. 'Class' nie odpowiada na' responsesToSelector: '. – RileyE
Wypróbuj. Nie ma go w nagłówku, ale wykonaj 'id classObject = [klasa SomeClass]; [classObject odpowiadaToSelector:] ' –