0

我正在实施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];
4

2 回答 2

1

你在这里声明了全局变量:

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

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

你不想要一个全局变量,你不能这样声明它,因为它不能在这个上下文中正确初始化,而且因为它在 C 和 ObjC 中格式不正确。

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

于 2012-04-28T20:54:06.197 回答
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];

}
于 2012-04-28T20:38:28.180 回答