首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元素不是编译时常量错误。

元素不是编译时常量错误。
EN

Stack Overflow用户
提问于 2012-04-28 20:28:19
回答 2查看 2.1K关注 0票数 0

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

当我试图替换IBAccount到那个屏幕时,我会得到一个错误:

初始化器元素不是编译时间常数。

代码的第一部分是我现在拥有的,UIViewController来自我想要用来加载FirstAccountViewControllerIIViewDeckController

代码语言:javascript
复制
-(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];
EN

回答 2

Stack Overflow用户

发布于 2012-04-28 20:54:06

您已经在这里声明了全局变量:

代码语言:javascript
复制
UIViewController* leftController =
    [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController =
    [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController];

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-28 20:38:28

代码语言:javascript
复制
UIViewController* leftController = [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController =  [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController];

是的,这是错误的--如果您想在启动时初始化全局变量(尽管您根本没有被建议使用全局变量),那么您将需要使用一个终结器函数:

代码语言:javascript
复制
UIViewController *leftController;
IIViewDeckController *deckController;

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

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10367267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档