2012-04-28 114 views
0

我實現IIViewDeckController到我的應用程序。初始值設定元素不是編譯時常錯誤

當我試圖取代IBAccount去那個屏幕,我得到一個錯誤:

Initializer element is not a compile time constant

代碼的第一部分是什麼,我現在有,而且UIViewControllerIIViewDeckController我想用來加載FirstAccountViewController

-(IBAction)account{ 
    FirstAccountViewController* ab=[[FirstAccountViewController alloc] init]; 
    [self.navigationController pushViewController:ab animated:YES]; 
    UIViewController* leftController = [[UIViewController alloc] init]; 
} 

UIViewController* leftController = [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController = [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController 
                      rightViewController:rightController]; 
+0

那些在方法體外進行的變量是什麼?他們有什麼用途,你在哪裏嘗試使用它們? – 2012-04-28 20:33:28

+0

@JacquesCousteau他們是非編譯時常量(end sarcasm) – 2012-04-28 20:36:17

+0

@ H2CO3:我不確定你的諷刺是否針對我;我知道錯誤意味着什麼,但我試圖弄清楚Max想用變量做什麼,這樣我就可以高效地回答這個問題。 – 2012-04-28 20:38:06

回答

0
UIViewController* leftController = [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController = [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController]; 

是啊,這是錯誤的 - 如果你想在啓動時初始化的全局變量(雖然你是不是在所有建議使用全局變量),你需要使用一個initalizer功能:

UIViewController *leftController; 
IIViewDeckController *deckController; 

__attribute__((constructor)) 
void __init() 
{ 
    leftController = [[FirstAccountViewController alloc] init]; 
    deckController = [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController]; 

} 
+0

如果我只想擁有一個全局變量,那麼這是否需要應用?它適用於那一頁? – 2012-04-28 20:55:47

+0

不,但由於您的原始問題包含全局變量,我也使用它們。儘管如此,除非你有充分的理由這樣做,否則他們不鼓勵使用。 – 2012-04-29 03:54:31

1

您已經聲明全局變量在這裏:

UIViewController* leftController = 
    [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController = 
    [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController]; 

和你想初始化它們withou上下文(例如,你傳遞的參數 - 應該沒有全局self)。

你不想一個全局變量在這裏,你不能宣佈它是這樣,因爲它不能正確地在這方面進行初始化,因爲它在C和ObjC生病形成。

我建議在這種情況下使用的伊娃。

+0

非常感謝。不過剛開始使用時objc所以原諒我不知道.. 我需要把的UIViewController的IBAction爲類能夠具有運行時,按下按鈕? – 2012-04-29 00:38:17

+0

@MaxRoper沒有正確的答案 - 這取決於你的應用程序的邏輯。 – justin 2012-04-29 05:45:09