2009-08-20 3 views
1

J'éprouve un comportement étrange. Dans un contrôleur de vue, je souhaite conserver une référence sur mon délégué d'application ([[UIApplication sharedApplication] delegate])self.appDelegate = [[délégué UIApplication sharedApplication]]; TOUJOURS 0x0

J'ai donc une propriété que j'ai définie lorsque mon contrôleur est instancié. Tout fonctionne sur le simulateur par le périphérique sur lequel ma propriété est toujours 0x0 dans le débogueur.

j'ai écrit ce code à tester:

 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) 
    {  
     AppDelegate *localVar = [[UIApplication sharedApplication] delegate]; // OK 
     self.appDelegate = [[UIApplication sharedApplication] delegate]; // 0x0 
    } 
    return self; 
} 
 

Je suis sûr que le appDelegate est réglé, j'écris aussi un setter pour vérifier qu'il est appelé

 

- (void)setAppDelegate:(AppDelegate *)delegate 
{ 
    appDelegate = delegate; // delegate is a valid address but appDelegate is still showing 0x0 
} 
 

Je me demande si mon La classe AppDelegate est bien écrite.

Avez-vous une idée?

Je suis perdu ...

Merci

Répondre

1

Au moment de votre contrôleur de vue est chargé, le délégué est probablement pas encore instancié ou mis dans l'objet UIApplication. Tout cela est fait dans le chargement de la plume, mais l'ordre est arbitraire.

2

Hers est certaines choses que vous pouvez essayer -

  1. Comment avez-vous déclaré votre self.appDelegate? Est-ce un objet de AppDelegate? Mettez un point d'arrêt dans - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil et voyez ce que self est. Est-ce une instance de AppDelegate?
  2. Aussi chaque fois que je veux obtenir une instance de AppDelegate Je le fais - AppDelegate *localVar = (AppDelegate *)[[UIApplication sharedApplication] delegate]; (avis le casting de type de AppDelegate*)
  3. I ce nikolia Points doute fort out est possible UIApplication délégué est la première chose qui s'instancié alors seulement est votre viewController appelé.

Espérons que cela aide ...

Questions connexes