以下代码给了我错误:

//  constants.h
extern NSArray const *testArray;
//  constants.m
NSArray const *testArray = [NSArray arrayWithObjects:  @"foo", @"bar", nil];

The error I get is
initializer element is not constant

Or if I take away the pointer indicator (*) I get:
statically allocated instance of Objective-C class 'NSArray'

推荐答案

简而言之,你不能.Objective-C对象只有在运行时创建,NSString除外.因此,不能使用表达式来初始化它们.

有几种方法.

(1) 在不使用const关键字的情况下声明NSArray *testArray,然后使用一些代码设置在应用程序生命周期早期调用的值.

(2) 声明一个方便的类方法,返回数组,然后在该方法中使用static NSArray *myArray,并将其视为一个单例(搜索"objective-c singleton"以获得关于如何实例化的大量答案).

Objective-c相关问答推荐

tableView:canEditRowAtIndexPath: 弹出 viewController 时崩溃

Objective-C 和 Cocoa 有什么区别?

自动属性合成 (@property) 和继承

iOS 指定初始化器:使用 NS_DESIGNATED_INITIALIZER

无法编译连接:错误是什么意思?

Objective-C:集合枚举块中的 continue继续?

仅替换 NSString 中子字符串的第一个实例

在objective-c中创建现在的时间戳作为NSNumber

如何正确获取文件大小并将其转换为 Cocoa 中的 MB、GB?

在 iOS 和 Mac OS X 应用程序中使用 C++

Objective-C 中的 const 与静态 NSStrings

UIWebView 不会zoom 内容以适应

如何从 RGBA 创建 UIColor?

iPhone:在 UITextField 上禁用 Auto-Cap/autocorrect 问题

主队列上的 performSelectorOnMainThread: 和 dispatch_async() 有什么区别?

目标覆盖 FRAMEWORK_SEARCH_PATHS 构建设置

UIImageView 并不总是为模板图像着色

如何在没有死锁的情况下同步调度主队列?

UITableView,我如何知道 cellForRowAtIndexPath 期间的哪个部分?

如何检测父视图控制器中模态视图控制器的解除?