我试图在视图控制器中的多个方法中使用变量整数。 secondsLeft变量工作正常,但otherNumber变量不起作用。我得到错误:初始化元素不是编译时常量。关于我应该怎么做的任何想法?谢谢你!
@interface ViewController ()
@end
@implementation ViewController
@synthesize countDown,Timerlbl;
int secondsLeft = 500;
int otherNumber =[(AppDelegate *)[UIApplication sharedApplication].delegate otherNumber];
答案 0 :(得分: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;
}
答案 1 :(得分:0)
我认为AppDelegate
是您的应用委托类的名称?
您是否尝试为AppDelegate添加导入,就像这样......
#import "AppDelegate.h"
@interface ViewController ()
答案 2 :(得分:0)
您不能声明这样的变量,因为编译器无法创建AppDelegate
的实例并询问它应该是otherNumber
的值。
根据使用方式的不同,最好不要定义otherNumber
变量,而是在每次使用时从AppDelegate
检索它。这可能意味着更多的打字,但它确实意味着您将始终获得otherNumber
的最新正确值
另外,在定义整数变量时,通常使用NSInteger
而不是int
是一个好主意。