Initializer元素不是编译时常量错误

时间:2012-04-28 20:28:19

标签: objective-c cocoa-touch compiler-errors

我正在将IIViewDeckController实施到我的应用中。

当我尝试更换IBAccount以进入该屏幕时,我收到错误:

  

Initializer元素不是编译时常量

代码的第一部分就是我现在所拥有的,UIViewController来自IIViewDeckController,我想用来加载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];

2 个答案:

答案 0 :(得分:1)

您已在此处声明了全局变量:

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

并且您尝试在没有上下文的情况下初始化它们(例如,您传递的参数 - 应该没有全局self)。

你不需要这里的全局变量,你也不能这样声明它,因为它不能在这个上下文中正确初始化,并且因为它在C和ObjC中形成了错误。

我建议在这种情况下使用ivar。

答案 1 :(得分: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];

}