我需要能够在源代码中使用一些预定义的值初始化数组,看起来有点像下面的内容。但是每个数组可能有数千个值。
@"key",@"value",
@"key",@"value",
@"key",@"value",
@"key",@"value",
...etc...
如何使用这些值初始化(例如)NSDictionary
,而不必将数千个值与源代码内联,即:
tokens = [[NSDictionary alloc] initWithObjectsAndKeys:
#import "keyvaluepairs1.h"
#import "keyvaluepairs2.h"
, nil];
甚至只是这样的纯数组:
char[] tokens = {
#import "schoolnames.h"
#import "universitynames.h"
}
我正在寻找的不是客观的“技巧”,而是更多地了解如何指导编译器导入或吸入其他文件的内容。如果需要,我愿意接受有关如何实现这一目标的其他想法。
答案 0 :(得分:3)
您可以创建一个作为NSArrays的NSDictionary的plist。然后轻松地将plist读入NSDictionary,然后从中检索每个数组。
NSString *path = [[NSBundle mainBundle] pathForResource:@"yourFile" ofType:@"plist"];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
NSArray *array = [dict objectForKey:@"array1"];
正如所指出的那样,每次从“未运行”的应用程序加载应用程序时,至少需要阅读一次。状态
答案 1 :(得分:0)
如果您的文本文件采用上面显示的格式,则需要编写一个简单的解析器来将数据读入NSDictionary
。
由于格式“词汇表”很简单,基于NSScanner
的线性解析器可以直接实现。
答案 2 :(得分:0)
经过多次搜索,我相信我已经找到了一种简单的方法来实现这一点,而无需确保到处都有文本文件。您可以使头文件看起来像这样:
#define SAMPLE_ARRAY \
@"a", @"value",\
@"b", @"value",\
@"c", @"value",\
...etc...
然后像这样导入或使用它们:
tokens = [[NSDictionary alloc] initWithObjectsAndKeys:
SAMPLE_ARRAY
SAMPLE_ARRAY2
nil];
鉴于数据永远不会改变,我看不出任何重大问题。