UIApplicationDelegate pregunta

En mi AppDelegate tengo una referencia a un NSObject como este:

@interface MyAppDelegate : NSObject <UIApplicationDelegate>
{
    MyObjectManager * myObjectManager;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@property (nonatomic, retain) MyObjectManager * myObjectManager;

Quiero acceder a esto desde mi UIViewController, así que hago esto:

MyAppDelegate * appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
MyObjectManager * myObjectManager = appDelegate.myObjectManager;
maMyArray = [[NSMutableArray alloc] init];

[[appDelegate myObjectManager] findMyStuff:5 foundArray:maMyArray];
//[myObjectManager findMyStuff:5 foundArray:maMyArray];

Sin embargo, creo que no entiendo la sintaxis en Objective C correctamente porque lanzo una excepción, EXC_BAD_ACCESS. Cuando miro los valores, parecen correctos.

¿Alguien puede explicar qué estoy haciendo mal?

Muchas Gracias

preguntado el 16 de mayo de 11 a las 20:05

2 Respuestas

Tienes que inicializar myObjectManager en algún lugar:

myObjectManager = [[MyObjectManager alloc] init];

El mejor lugar es probablemente en el - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions método.

No olvide liberarlo en el dealloc.

contestado el 17 de mayo de 11 a las 00:05

Yo sí, en MyAppDelegate. Hago esto: MyObjectManager = [[MyObjectManager alloc] initWithContentsOfSQLiteDB: @ "MyDB.sql"]; ¿Tengo que hacer algo más? - LilMoke

Oh, ya veo, está bien, pero ¿dónde llamo a mi init para hacer las cosas que tengo que hacer? ¿Puedo llamar a [[self alloc] init] en mi función de inicio? - LilMoke

Su código también debería funcionar bien siempre que sea myObjectManager =, no MyObjectManager =. Si coloca un punto de interrupción justo antes de la llamada al método findMyStuff:, ¿myObjectManager apunta a algo? - Joe

No llama a alloc en init, pero puede llamar a otros mensajes de inicio que necesite. - Lou Franco

En su función de inicio para MyObjectManager normalmente tendría algo como 'self = [super init];' y 'volverse a sí mismo'; - Joe

¿Dónde está el código que asigna un MyObjectManager y lo asigna a su propiedad myObjectManager?

Hasta que hagas eso, es nulo.

contestado el 17 de mayo de 11 a las 00:05

En MyAppDelegate ... otro comentario. - LilMoke

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.