Objective c 能否为plist文件定义自定义枚举类型?

Objective c 能否为plist文件定义自定义枚举类型?,objective-c,ios,xcode,cocoa-touch,plist,Objective C,Ios,Xcode,Cocoa Touch,Plist,我定义了一个枚举,用于设置配置信息。让我们调用枚举对象类型 它定义了各种不同的类型,枚举为这些类型定义了人类可读的名称 我的合作伙伴编写了设置代码,该代码在对象数组中循环并设置这些类型值。他使用整数值 以下是他所做工作的粗略概述: for (int index = 0; index < [configArray count]; index++) { ConfigObject aConfigObject = [configArray objectAtIndex: index]; if

我定义了一个枚举,用于设置配置信息。让我们调用枚举对象类型

它定义了各种不同的类型,枚举为这些类型定义了人类可读的名称

我的合作伙伴编写了设置代码,该代码在对象数组中循环并设置这些类型值。他使用整数值

以下是他所做工作的粗略概述:

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;
}
更好,但仍然是严格的代码

我想将此配置信息移动到plist文件中,并在启动时读取它。然而,这让我回到了最初的问题。如果我将这些值放入plist,我不知道如何使用自定义枚举类型。我被迫在plist中放入数值,这使得代码plist无法读取和维护

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


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

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

NSString *path = [[NSBundle mainBundle] pathForResource:@"myPlistFileName" ofType:@"plist"];
NSDictionary *myPlist = [NSDictionary dictionaryWithContentsOfFile:path];
NSDictionary *configs = [myPlist objectForKey:@"types"];

在启动时阅读字典,内容如下:

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]];
}
for(整数索引=0;索引<[config count];索引++){
ConfigObject*aConfigObject=[configArray objectAtIndex:index];
aConfigObject.type=[config objectForKey:[NSString stringWithFormat:@“%d”,index]];
}

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

NSString *path = [[NSBundle mainBundle] pathForResource:@"myPlistFileName" ofType:@"plist"];
NSDictionary *myPlist = [NSDictionary dictionaryWithContentsOfFile:path];
NSDictionary *configs = [myPlist objectForKey:@"types"];

在启动时阅读字典,内容如下:

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]];
}
for(整数索引=0;索引<[config count];索引++){
ConfigObject*aConfigObject=[configArray objectAtIndex:index];
aConfigObject.type=[config objectForKey:[NSString stringWithFormat:@“%d”,index]];
}

你能澄清一下吗?什么因素决定了
aConfigObject
对象的类型?目前,您正在使用它在数组中的位置来确定它,但是您能告诉我
aConfigObject
的哪个属性是决定其类型的因素吗?您能澄清一下吗?什么因素决定了
aConfigObject
对象的类型?目前,您正在使用它在数组中的位置来确定它,但是您能告诉我
aConfigObject
的哪个属性是决定其类型的因素吗?您误解了我的问题。我想要一种方法来教内置属性列表编辑器关于新的枚举类型,而不是内置类型。我希望能够创建一个属性列表,并将一个条目声明为新的自定义枚举类型,以便在打开plist文件时,它使用常量名称而不是整数值显示值。我猜有一种方法可以让Xcode在启动时读取定义属性列表编辑器支持的枚举类型的配置文件。您误解了我的要求。我想要一种方法来教内置属性列表编辑器关于新的枚举类型,而不是内置类型。我希望能够创建一个属性列表,并将一个条目声明为新的自定义枚举类型,以便在打开plist文件时,它使用常量名称而不是整数值显示值。我猜有一种方法可以让Xcode在启动时读取定义属性列表编辑器支持的枚举类型的配置文件。