Objective c 初始值设定项元素不是编译时常量错误

Objective c 初始值设定项元素不是编译时常量错误,objective-c,cocoa-touch,compiler-errors,Objective C,Cocoa Touch,Compiler Errors,我正在我的应用程序中实现 当我试图替换IBAccount以转到该屏幕时,我收到一个错误: 初始值设定项元素不是编译时常量 代码的第一部分是我现在拥有的,UIViewController来自IIViewDeckController,我想用它来加载FirstAccountViewController -(IBAction)account{ FirstAccountViewController* ab=[[FirstAccountViewController alloc] init];

我正在我的应用程序中实现

当我试图替换IBAccount以转到该屏幕时,我收到一个错误:

初始值设定项元素不是编译时常量

代码的第一部分是我现在拥有的,
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];
是的,这是错误的——如果您想在启动时初始化全局变量(尽管您根本不建议使用全局变量),您需要使用initializer函数:

UIViewController *leftController;
IIViewDeckController *deckController;

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

}

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

UIViewController* leftController =
    [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController =
    [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController];
您试图在没有上下文的情况下初始化它们(例如,您传递的参数——不应该有全局
self

这里不需要全局变量,也不能将其声明为全局变量,因为在此上下文中无法正确初始化,而且在C和ObjC中格式不正确


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

这些变量在方法体之外做什么?它们是干什么用的?你想在哪里使用它们?@JacquesCousteau它们是非编译时间常数(结束讽刺)@H2CO3:我不确定你的讽刺是否针对我;我知道错误的意思,但我正试图弄清楚Max想对变量做什么,这样我才能以富有成效的方式回答这个问题。@Jacquescowsteau当然不是。这是针对应该有rtfm的OP。@Jacquescowsteau我只是想把这个效果应用到iAction,并让它加载第一个AccountViewController以实现这个效果。我知道这些行不起作用,我只是把它们都放在那里,看看如何处理……抱歉,这里还在学习:)如果我只想让它在那一页上工作,那需要作为全局变量应用吗?不,但是因为你最初的问题包含全局变量,我也使用了它们。不过,除非你有很好的理由这样做,否则不鼓励使用它们。非常感谢。还是刚刚习惯objc所以请原谅我不知道。。我是否需要将UIViewController放在iAction类中,才能在按下按钮时运行它?@MaxRoper没有正确答案——这取决于应用程序的逻辑。
UIViewController* leftController =
    [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController =
    [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController];