我正在写下面这段代码,它给出了以下错误
@implementation ViewController
NSArray *myArray = [[NSArray alloc]initWithObjects:@"paul",@"cyrus",@"victor",nil ];
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
}我在声明了“myArray”的行上得到了“初始化元素而不是编译时常量”。
请注意,我是在".m“文件而不是".h”文件中初始化数组的。
发布于 2012-08-22 03:20:38
如果初始化全局变量或静态变量,则必须使用编译时常量。基本上,编译器必须将该值写入目标文件。您的代码正在发送多条消息,这只能在运行时完成。
如果这真的必须是一个全局变量,你必须用某种方法来初始化它。+initialize通常用来做这样的事情。
发布于 2012-08-22 03:31:29
如前所述,您已经声明了一个全局变量。
您可以使用一个简单的函数来代替:
static NSArray * NamesArray() {
return [[NSArray alloc]initWithObjects:@"paul",@"cyrus",@"victor",nil];
}这可能不是您想要的,完全没有必要创建全局NSArray,但如果您正在将源代码编译为Objective-C++,那么实际上您可以使用容器文字表达式来初始化全局‘re:
// requires Objective-C++
static NSArray * const arr = @[@"paul",@"cyrus",@"victor"];由于创建此数组及其元素并不困难,因此您应该:
如果创建它的成本真的很高,那么您可能更喜欢这种形式:
// requires Objective-C++
static NSArray * Names() {
static NSArray * const arr = @[@"paul",@"cyrus",@"victor"];
return arr;
}因为在您需要它之前,它是不会被构造的。全局初始化可能是非常有问题的。
发布于 2012-08-22 03:14:18
让myArray成为一个ivar并在适当的地方初始化它,或者在你的类中创建一个静态全局并在" initialize“类方法中初始化它。
https://stackoverflow.com/questions/12061435
复制相似问题