2009-08-20 9 views
1

Ich habe ein seltsames Verhalten. In einem View-Controller möchte ich einen Verweis auf meinem App-Delegierten ([[UIApplication sharedApplication] delegate])self.appDelegate = [[UIApplication sharedApplication] delegate]; IMMER 0x0

behalten So habe ich eine Eigenschaft, die ich festgelegt, wenn mein Controller instanziiert wird. Alles funktioniert auf dem Simulator von auf dem Gerät meine Eigenschaft ist immer 0x0 im Debugger.

Ich schrieb diesen Code zu testen:

 

- (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; 
} 
 

Ich bin sicher, dass die AppDelegate gesetzt, ich zu überprüfen, auch einen Setter schreiben, dass es

 

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

wenn ich frage mich, nennt meine AppDelegate-Klasse ist gut geschrieben.

Haben Sie eine Idee?

Ich bin verloren ...

Dank

Antwort

1

Zu der Zeit wird Ihr View-Controller geladen wird, ist der Delegierte wahrscheinlich noch nicht im UIApplication Objekt instanziiert oder eingestellt. All dies geschieht beim Laden der Schreibspitze, aber die Reihenfolge ist beliebig.

2

Hers gibt einige Dinge, die Sie ausprobieren können -

  1. Wie haben Sie Ihre self.appDelegate erklärt? Ist es ein Objekt von AppDelegate?
  2. Setzen Sie einen Haltepunkt in - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil und sehen Sie, was self ist. Ist es eine Instanz von AppDelegate?
  3. Auch wenn ich eine Instanz von AppDelegate bekommen möchte ich dies tun - AppDelegate *localVar = (AppDelegate *)[[UIApplication sharedApplication] delegate]; (man beachte die Typumwandlung von AppDelegate*)
  4. ich sehr Zweifel, was Nikolia weist darauf hin, ist möglich, als UIApplication Delegierten die erste Sache ist, die nur dann instanziiert wird wird dein ViewController aufgerufen.

Hope this helps ...

Verwandte Themen