2011-11-15 16 views
10

Estoy tratando de llamar a un método en el controlador de vista desde el delegado de la aplicación, pero Xcode dice No se conoce el método de clase para el selector 'myMethodHere'. Aquí está mi código:Llamando al método del controlador de vista desde la aplicación delegado

AppDelegate.m:

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

MainViewController.m:

-(void) myMethodHere { 
    [..] 
} 

Respuesta

11

me gustaría probar

MainViewController * vc = [[MainViewController alloc]init]; 
[vc myMethodHere]; 
[vc release]; 
  1. asegúrese de importar su MainViewController en su aplicación delegado .m archivo
  2. asegúrese de agregar "myMethodHere" a su MainViewController .h archivo
+2

No estoy muy seguro de si esto funciona sin embargo. ¿Esto no crea otra instancia de la vista a la que intenta acceder? Digamos que estás intentando ejecutar un método en ese controlador de vista, pero el método depende de un cierto bit de UI/datos en esa vista, y luego hacerlo no funcionará, ya que la instancia que has creado no contiene esa información ¿¿derecho?? – Supertecnoboff

0

tratar de escribir

-(void) myMethodHere; 

en MainViewController.h

11

Usted está tratando de llame al método clase cuando desee llamar a un instancia método. Si el controlador de vista es el raíz del controlador de vista, entonces usted debería ser capaz de llamar así:

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

Si no es el controlador de vista raíz entonces tendrá que encontrar alguna otra manera de conseguir el asimiento de la instancia y luego llamar al método como en la última línea anterior.

5

Si desea tener acceso a un controlador de vista sobre un tablero de historia, es posible utilizar este bloque de código de la AppDelegate:

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

recuerde agregar la importación.

1

En Swift, se puede escribir como esto

UIApplication.sharedApplication().keyWindow?.rootViewController?.yourMethodName() 
Cuestiones relacionadas