全局变量从App Delegate中提取

时间:2013-02-03 09:11:26

标签: iphone ios objective-c xcode

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

@interface ViewController ()

@end

@implementation ViewController
@synthesize countDown,Timerlbl;

int secondsLeft = 500;

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

3 个答案:

答案 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是一个好主意。