tutorial iphone cocoa-touch

iphone - tutorial - Hacer referencia a las variables de instancia de AppDelegate



cocoa touch tutorial (4)

Tengo un proyecto basado en la plantilla de la aplicación basada en la navegación. En AppDelegate están los métodos -applicationDidFinishLoading: y -applicationWillTerminate: En esos métodos, estoy cargando y guardando los datos de la aplicación y almacenándolos en una variable de instancia (en realidad es un objeto-gráfico).

Cuando se carga la aplicación, carga MainWindow.xib, que tiene un NavigationConroller, que a su vez tiene un RootViewController. La propiedad RootViewController nibName apunta a RootView (mi clase de controlador real).

En mi clase, deseo referirme al objeto que creé en el método -applicationDidFinishLoading: para que pueda obtener una referencia al mismo.

¿Puede alguien decirme cómo hacer eso? Sé cómo hacer referencia entre los objetos que he creado mediante programación, pero parece que no puedo encontrar el hilo para volver, dado que el paso intermedio se realizó desde el archivo NIB.


Aquí hay una alternativa portátil bien definida para iOS 4.0 y superior:

UIApplication *myApplication = [UIApplication sharedApplication]; UIWindow *mainWindow = [myApplication keyWindow]; UIViewController *rootViewController = [mainWindow rootViewController];

o, en una línea,

UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];

No olvides configurar la propiedad rootViewController la ventana (por ejemplo, en IB) o esto hará jack.


Defino una macro y la utilizo así: -

#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)

En mi código: -

appDelegateShared.myVariable=anotherVariable;


Para las variables (generalmente la estructura de datos del modelo) que necesito para acceder a ellas en cualquier lugar de la aplicación, declarelas en su clase AppDelegate. Cuando necesite referenciarlo:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; //and then access the variable by appDelegate.variable


Si entiendo su pregunta, ¿quiere hacer referencia a las propiedades / variables miembro en su objeto AppDelegate? La forma más simple es usar el delegado [[UIApplication sharedApplication]] para devolver una referencia a su objeto.

Si tiene una propiedad llamada ventana, puede hacer esto:

UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window]; //do something with mainWindow