你能为plist文件定义自定义枚举类型吗?

时间:2012-10-04 17:43:05

标签: objective-c ios xcode cocoa-touch plist

我有一个我定义的用于设置配置信息的枚举。让我们调用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编辑器来理解这些枚举?那将是一个巨大的进步。我做了相当多的搜索,但到目前为止还没有找到任何答案。

1 个答案:

答案 0 :(得分:0)

您可以将配置添加到如下结构的pList文件中:

enter image description here

使用以下内容在启动时阅读该词典:

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]];
}