0

我试图在我的视图控制器中的多个方法中使用变量整数。secondsLeft 变量工作正常,但 otherNumber 变量不起作用。我得到错误:初始化元素不是编译时常量。关于我应该如何做到这一点的任何想法?谢谢你!

@interface ViewController ()

@end

@implementation ViewController
@synthesize countDown,Timerlbl;

int secondsLeft = 500;

int otherNumber =[(AppDelegate *)[UIApplication sharedApplication].delegate otherNumber];
4

3 回答 3

2

问题是您已声明otherNumber为全局变量,并且编译器希望初始分配是编译时常量。[delegate otherNumber]导致选择器调用,这不是编译时常量。

解决方案是将分配移动到代码中。例如:

- (id)init
{
    self = [super init];
    if(self) {
        otherNumber = [(AppDelegate *)[UIApplication sharedApplication].delegate otherNumber];
    }

    return self;
}

另外需要注意的是,全局变量在 Objective-C 中通常是不可取的。@property值通常更推荐。不仅如此,你的ViewController类现在还依赖于你的AppDelegate. 由于您AppDelegate最有可能负责实例化您的ViewController,因此请考虑将其注入otherNumber. 例如:

@interface ViewController ()
@property (nonatomic, assign) int otherNumber;
@end

- (id)initWithSomeNumber:(int)otherNumber
{
    self = [super init];
    if(self) {
        self.otherNumber = otherNumber;
    }

    return self;
}
于 2013-02-03T09:41:22.557 回答
0

我假设这AppDelegate是您的应用程序委托类的名称?

您是否尝试过为您的 AppDelegate 添加导入,像这样...

#import "AppDelegate.h"

@interface ViewController ()
于 2013-02-03T09:19:23.313 回答
0

你不能像这样声明一个变量,因为编译器不能创建一个实例AppDelegate并询问它的值otherNumber应该是什么。

根据它的使用方式,最好不要定义otherNumber变量,而是在AppDelegate每次使用时检索它。这可能意味着更多的输入,但这确实意味着您将始终获得最新的正确值otherNumber

此外,通常在定义整数变量时使用NSInteger而不是使用它是一个好主意。int

于 2013-02-03T09:48:58.947 回答