2010-06-21 14 views
5

Przy wywołaniu metody używamwywołanie metody w Xcode

[self methodname]; 

problem mam jest w xCode dostaję mnóstwo ostrzeżeń! Mówi się: "*xxxappdelegate.app may not respond to methodname*".

Czy istnieje lepszy sposób wywoływania metod?

+0

Nie będę * zawsze * używał 'self'. –

Odpowiedz

5

Jeśli masz ten ostrzeżenie oznacza to, że albo:

  • Ta metoda nie istnieje w swojej klasie
  • Jeśli dzwonisz tej metody na innej klasy (nie ja), a następnie ty nie zaimportowano nagłówków dla , które klasy
+0

Dzięki, Znowu zajrzę do mojego pliku .h ponownie :) – user370507

4

Te ostrzeżenia oznaczają po prostu, że kompilator nie wie, czy dana klasa ma metodę, którą lling. Upewnij się, że wywoływana metoda jest zdefiniowana powyżej miejsca w pliku .m, którego używasz, lub zadeklaruj metodę u góry pliku.

@implemention A 

-(void)blah 
{ 
    [self foo]; // warning! 
} 

-(void)foo 
{ 
    [self blah]; // no warning 
} 

@end 
+0

Dzięki za to, :) – user370507

+1

Aby tego uniknąć, zadeklaruj metodę w pliku .h. – Nishant

0

Dodaj methodname do @interface dla klasy, xxxappdelegate w swoim przykładzie. Lub po prostu upewnij się, że implementacja methodname jest wcześniejsza niż miejsce, do którego wywołujesz ją w pliku.

+0

Dziękujemy za pomoc :) – user370507

1

Istnieje coś, co nazywa się porządkiem kompilacji. Gdy wywołujesz metodę foo, nie jest ona jeszcze zdefiniowana, jednak po wywołaniu metody blah jest zdefiniowana tylko w górnej linii.

bardziej szczegółowe:

cout << a; 
string a = "hello"; 

Kiedy to zrobisz dostaniesz błąd niezdefiniowanej zmiennej "a". Co należy zrobić, to:

string a = "hello"; 
cout << a; 
0

Jeśli plik .h ma metoda zadeklarowana nie może być jakiś problem związany z xcodes niezdolność do indeksu, aby rozwiązać ten przejść do preferencji i usunąć archiwów i innych przechowywanych danych.

Powiązane problemy