2012-04-28 62 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