我正在将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];
答案 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];
}