Xcode语义问题“Initializer元素不是编译时常量”

时间:2012-03-25 13:11:48

标签: objective-c xcode4

调用NSMakeRange方法时出现此错误。我做错了什么?

#import <Foundation/Foundation.h>
//
NSRange range1 = NSMakeRange(12, 5);

2 个答案:

答案 0 :(得分:5)

在函数或方法之外初始化变量时,只能使用常量值:不能执行任何代码。问题在于您尝试执行NSMakeRange。 (参见this question的答案,类似)。

解决方案是声明range1但不为其分配任何值,然后实现设置值的+initialize方法。 initialize是在类中调用任何其他方法之前调用的类方法。

+ (void)initialize {
    if (range1 == NULL) {
        range1 = NSMakeRange(12, 5);
    }
}

答案 1 :(得分:0)

当您尝试在@implementation中初始化变量并在任何方法之外时,会抛出

initializer-element-is-not-a-compile-time-constant错误。您可以在@implementation之前声明变量,以便每个方法都可以访问它。并且您可以在方法中声明变量,以便它可以在该方法中可见。