我有一个我定义的用于设置配置信息的枚举。让我们调用enum objectTypes
它定义了各种不同的类型,枚举为这些类型定义了人类可读的名称。
我的合作伙伴编写了设置代码,循环遍历对象数组并设置这些类型值。他使用了整数值。
以下是他所做的粗略概述:
for (int index = 0; index < [configArray count]; index++)
{
ConfigObject aConfigObject = [configArray objectAtIndex: index];
if (index ==0;
aConfigObject.type = 7;
else if (index == 1)
aConfigObject.type = 5;
else if (index == 2)
aConfigObject.type = 3;
}
(这是用于说明我所说的内容的伪代码。)
出于几个原因,我不喜欢这样。首先,它很难读懂。什么是7型?其次,如果我稍后添加新的枚举类型,或者更改枚举的顺序,它会中断。 (用户可见的类型列表以数字顺序显示。)
我改变了代码说:
aConfigObject.type = blueType;
更好,但仍然是严格的代码。
我想将此配置信息移动到plist文件中并在启动时读取它。但是,这让我回到原来的问题。如果我将这些值放入plist,我不知道如何使用自定义枚举类型。我被迫在我的plist中放入数值,这使得代码可以读取和维护。
Apple在其plist中使用自定义枚举类型。
是否可以定义新的自定义枚举类型并在最新版本的Xcode(目前使用Xcode 4.5)中教导内置plist编辑器来理解这些枚举?那将是一个巨大的进步。我做了相当多的搜索,但到目前为止还没有找到任何答案。
答案 0 :(得分:0)
您可以将配置添加到如下结构的pList文件中:
使用以下内容在启动时阅读该词典:
NSString *path = [[NSBundle mainBundle] pathForResource:@"myPlistFileName" ofType:@"plist"];
NSDictionary *myPlist = [NSDictionary dictionaryWithContentsOfFile:path];
NSDictionary *configs = [myPlist objectForKey:@"types"];
现在configs
会有你的配置。您现在可以像这样设置类型:
aConfigObject.type = [config objectForKey:kBlueType]; // Assuming you have set up your constants for it.
现在关于这个问题:
其次,如果我稍后添加新的枚举类型,或者更改枚举的顺序,它就会中断。
在我看来,您正在使用数组中对象的位置来确定其类型。 因此,为了使你的循环不那么僵硬,你可以这样做:
for (NSUInteger index = 0; index < [config count]; index++) {
ConfigObject *aConfigObject = [configArray objectAtIndex: index];
aConfigObject.type = [config objectForKey:[NSString stringWithFormat:@"%d", index]];
}