2009-08-20 65 views
1

我正在經歷一個奇怪的行爲。 在視圖控制器我想保留我的應用程序代理的參考([[UIApplication sharedApplication] delegate]self.appDelegate = [[UIApplication sharedApplication] delegate];總是0x0

所以我有一個屬性,當我的控制器實例化時,我設置了。 所有工作在模擬器上的設備上,我的屬性總是在調試器中爲0x0。

我寫了這個代碼進行測試:

 

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

我深信的appDelegate設置,我也寫了二傳,以驗證它被稱爲

 

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

我想知道如果我的AppDelegate類寫得很好。

你有什麼想法嗎?

我迷路了......

感謝

回答

1

在您的視圖控制器被加載時,代表可能尚未實例化或在UIApplication對象設置。所有這些都是在筆尖加載中完成的,但順序是任意的。

2

赫斯的一些事情,你可以嘗試 -

  1. 你如何申報您的self.appDelegate?它是AppDelegate的對象嗎?
  2. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil中放置一個斷點,看看self是什麼。這是AppDelegate的實例嗎?
  3. 此外,每當我想要得到的AppDelegate一個實例我做到這一點 - AppDelegate *localVar = (AppDelegate *)[[UIApplication sharedApplication] delegate];(注意的AppDelegate*類型轉換)
  4. 我高度懷疑什麼nikolia指出的是儘可能UIApplication委託是被實例化才的第一件事是你的viewController調用。

希望這會有所幫助...

相關問題