2012-12-19 11 views
10

Powiel możliwe:
Conforming protocol privatelyPrywatne wdrażanie protokołu?

Klasa kopalni próbuje zarejestrować się jako delegat do obiektu NSXMLParser że tworzy. Jednak nie sądzę, żebym chciał, aby moja klasa publicznie ujawniła, że ​​implementuje protokół NSXMLParserDelegate, ponieważ obiekt NSXMLParser jest prywatną zmienną używaną tylko z klasy.

Czy mam prawo unikać podawania protokołu, a jeśli tak, to jak zaimplementować protokół bez upublicznienia tego, co robi ta klasa?

Odpowiedz

14

spróbuj umieścić to w pliku .m:

@interface MyClass (Private) <NSXMLParser> 
@end 

Konkretna nazwa kategorii (Private) nie ma znaczenia - w rzeczywistości można użyć pustego zestawu nawiasach (patrz niżej) - ale myślę, to powinno wymagać implementacji wymaganych metod i poinformowania kompilatora, że ​​twoja klasa implementuje protokół, przynajmniej w tym pliku.

Jeśli to nie zadziała, spróbuj po prostu usunąć <NSXMLParser> z pliku .h i jeśli to konieczne, przesyłając self do id<NSXMLParser>, podczas konfigurowania delegata analizatora składni.

+0

Po napisaniu tego posta zauważyłem w sekcji "Powiązane", że ktoś już znalazł rozwiązanie. Sugerują utworzenie anonimowej kategorii w pliku .m; '@interface MyClass() '. Jeśli usuniesz "Prywatne" lub wspomnisz, że anonimowa kategoria działa, zaakceptuję Twój wpis jako odpowiedź. :) +1 za pomysł "id ' niezależnie :) –

+0

Dodałem notatkę. Dlaczego nie wysłać linku do tej odpowiedzi? – paulmelnikow

+0

http://stackoverflow.com/questions/3813316/conforming-protocol-privately?rq=1 Zastanawiam się, czy powinienem zaznaczyć mój wpis jako duplikat. Nie wiem, jak to zrobić. –