2011-11-15 17 views
10

Próbuję wywołać metodę w kontrolerze widoku z delegata aplikacji, ale Xcode mówi Nieznana metoda klasy dla selektora "myMethodHere". Oto mój kod:Wywołanie metody kontrolera widoku z delegata aplikacji

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [..] 
      [MainViewController myMethodHere]; 
    [..] 
    return YES; 
} 

MainViewController.m:

-(void) myMethodHere { 
    [..] 
} 

Odpowiedz

11

chciałbym spróbować

MainViewController * vc = [[MainViewController alloc]init]; 
[vc myMethodHere]; 
[vc release]; 
  1. Upewnij zaimportować MainViewController w delegata aplikacji .m plików
  2. upewnij się dodać „myMethodHere” do MainViewController .h plik
+2

Im niezbyt pewny, czy to działa, choć. Czy to nie tworzy kolejnej instancji widoku, do którego próbujesz uzyskać dostęp? Powiedzmy, że próbujesz uruchomić metodę w tym kontrolerze widoku, ale ta metoda jest zależna od pewnego rodzaju interfejsu użytkownika/danych w tym widoku, więc wykonanie tej czynności nie zadziała, ponieważ utworzona instancja nie zawiera tych danych dobrze?? – Supertecnoboff

0

Spróbuj napisać

-(void) myMethodHere; 

w MainViewController.h

11

Próbujesz wywołaj metodę klasy, jeśli chcesz wywołać metodę instancji. Jeśli kontroler widoku jest korzeń widok kontroler, to powinieneś być w stanie nazwać tak:

UIWindow *window = [UIApplication sharedApplication].keyWindow; 
MainViewController *rootViewController = window.rootViewController; 
[rootViewController myMethodHere]; 

jeśli nie jest to widok kontroler główny będziesz musiał znaleźć jakiś inny sposób na dotarcie do instancji, a następnie wywołanie metody jak w ostatnim wierszu powyżej.

5

Jeśli chcesz uzyskać dostęp do kontrolera widoku na scenorys, można użyć tego fragmentu kodu z AppDelegate:

MainViewController *rootViewController = (MainViewController*)self.window.rootViewController; 
[rootViewController aMethod]; 

Pamiętaj, aby dodać importu.

1

w Swift, można napisać to tak

UIApplication.sharedApplication().keyWindow?.rootViewController?.yourMethodName() 
Powiązane problemy