¿Cómo acceder a las variables del controlador de vista desde el delegado de la aplicación... y viceversa?
Frecuentes
Visto 11,704 veces
6
Me gustaría que el controlador de vista pueda acceder dog
en el delegado de la aplicación.
Me gustaría que el delegado de la aplicación pueda acceder mouse
en el controlador de vista.
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
int mouse; // <----------------
}
@end
- (void)viewDidLoad
{
[super viewDidLoad];
mouse = 12; // <-------------------
NSLog(@"viewDidLoad %d", dog); // <---------------
}
#import <UIKit/UIKit.h>
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
int dog; // <---------------
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"applicationWillResignActive %d", mouse); // <--------------
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
dog = 77; // <---------------------
NSLog(@"applicationDidBecomeActive");
}
2 Respuestas
8
Parte 1: En ViewController.h:
-(int)mouse; //add this before the @end
En ViewController.m, agregue este método:
-(int)mouse
{
return mouse;
}
Para acceder al mouse desde AppDelegate, use self.viewController.mouse Por ejemplo;
NSLog(@"ViewController mouse: %i", self.viewController.mouse);
Parte 2:
En AppDelegate.h:
-(int)dog; //add this before the @end
En AppDelegate.m, agregue este método:
-(int)dog
{
return dog;
}
En ViewController.m:
#import "AppDelegate.h"
Para acceder al perro desde ViewController, use esto:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"dog from AppDelegate: %i", [appDelegate dog]); //etc.
contestado el 03 de mayo de 12 a las 19:05
En la parte 1: self.viewController.mouse
posible enviar argumentos? - usuario285594
6
En el archivo de encabezado del controlador de vista, agregue el mouse como una propiedad:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
NSInteger mouse; // <----------------
}
@property (nonatomic, assign) NSInteger mouse;
@end
Sintetice la propiedad en la implementación de su controlador de vista justo debajo de la línea @implementation:
@synthesize mouse;
En su aplicación, delegue agregue perro como propiedad:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
NSInteger dog; // <---------------
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@property (nonatomic, assign) NSInteger dog;
@end
También sintetice dog en la implementación del delegado de su aplicación.
Ahora, en el delegado de su aplicación, suponiendo que tenga una referencia a su controlador de vista, puede acceder al mouse de esta manera:
viewController.mouse = 13;
Puede hacer lo mismo con la clase de delegado de su aplicación, a la que se puede acceder desde cualquier controlador de vista usando (suponiendo que el nombre de la clase de delegado de su aplicación sea AppDelegate):
((AppDelegate *)([UIApplication sharedApplication].delegate)).dog = 13;
Le recomendaría que use también NSInteger en lugar de int.
contestado el 03 de mayo de 12 a las 19:05
(viewController.mouse = 13;) necesita "self" -> (self.viewController.mouse = 13;) - jdl
Eso realmente dependería de si viewController es o no una propiedad sintetizada del delegado de la aplicación. Si fuera así, este sería el método preferido para acceder a él. - Pedro Willsey
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas objective-c ios cocoa-touch or haz tu propia pregunta.
¿Cómo acceden dos objetos a las variables del otro? - jscs