2009-02-26 16 views
44

Próbuję zbudować aplikację na iPhone'a. I stworzył
metody takie jak to:Jak mogę wywołać metodę w Objective-C?

- (void)score { 
    // some code 
} 

i próbowałem zadzwonić go w inny sposób tak:

- (void)score2 { 
    @selector(score); 
} 

Ale to nie działa. Jak więc poprawnie wywołać metodę?

Odpowiedz

23

myślę, co próbujesz zrobić, to:

-(void) score2 { 
    [self score]; 
} 

Składnia [object message] jest normalnym sposobem wywołania metody w Objective-C. Myślę, że składnia @selector jest używana, gdy metoda, która ma być wywołana, musi być określona w czasie wykonywania, ale nie wiem, wystarczająco dobrze, aby uzyskać więcej informacji na ten temat.

+0

@selector daje „nazwa” sposobu w formie Objectiv e-C może używać do wysyłania wiadomości. Jest używany nieco analogicznie do wskaźnika funkcji. – Chuck

27

Proponuję przeczytać The Objective-C Programming Language. Część dotycząca przesyłania wiadomości jest dokładnie tym, czego potrzebujesz, ale cała sprawa pomoże Ci zacząć. Po tym, może spróbuj zrobić kilka samouczków, aby poczuć to, zanim wskoczysz do tworzenia własnych aplikacji.

+6

@fijiaaron: Nie powiedziałem "RTFM". Powiedziałem, że to pytanie było na tak elementarnym poziomie, że gdyby musiał o to zapytać, chciał, aby jego doświadczenie w Objective-C było bardzo frustrujące i przeczytanie tego wstępnego przewodnika było dobrym początkiem na właściwej drodze. Naucz człowieka, jak łowić ryby, wiesz. Osobiście uważam, że taka odpowiedź jest o wiele bardziej pomocna niż kłamca-wymiotowanie nieznanej jakości. – Chuck

5

użyj:

[self performSelector:@selector(score) withObject:nil afterDelay:0.2]; 
+2

Zastanawiam się przez chwilę, czy dodanie opóźnienia do metody było możliwe. Nigdy nie musiałem tego robić, ale zawsze zastanawiam się, czy można to zrobić i jak to się robi. :) niezłe. Przyszedł na jedną rzecz i znalazł coś pożytecznego. – Jiraheta

16

wywołanie metody jest takie, jak

[className methodName] 

jednak jeśli chcesz wywołać metodę w tej samej klasie można wykorzystać własny

[self methodName] 

wszystko powyższe jest, ponieważ metoda ta nie brała żadnych parametrów

jednak jeśli metoda bierze parametrami trzeba to zrobić jak ten

[self methodName:Parameter] 
+0

To wydaje się jasne i zawiera parametr, który jest przydatny, nawet jeśli nie dla prostego przykładu "wyniku". – Matt

1
[self score]; instead of @selector(score) 
Powiązane problemy