2

我有一个我定义的用于设置配置信息的枚举。让我们调用枚举 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 中,这使得代码 plist 可以读取和维护。

Apple 在其 plist 中到处使用自定义枚举类型。

是否可以定义新的自定义枚举类型并在最新版本的 Xcode(当前使用 Xcode 4.5)中教授内置 plist 编辑器来理解这些枚举?那将是一个巨大的进步。我已经进行了大量搜索,但到目前为止还没有找到任何答案。

4

1 回答 1

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]];
}
于 2012-10-04T19:05:44.507 回答