objective-c - 您可以为plist文件定义自定义枚举类型吗?

标签 objective-c ios xcode cocoa-touch plist

我已经定义了一个枚举,用于设置配置信息。让我们称之为枚举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可以读取和维护。

苹果公司在用户遍地使用自定义枚举类型。

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

最佳答案

您可以将配置添加到如下所示的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]];
}

关于objective-c - 您可以为plist文件定义自定义枚举类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732765/

相关文章:

iOS :GMail API - Send Attachments with email

ios - 新的 view.frame.y 与 label.frame.y 不匹配

ios - 如何获取所有NSArray中存在的对象

objective-c - NSView drawRect 干扰 NSButton 悬停

objective-c - 如何在 Objective-C 项目中导入和使用 Swift Pod 框架

ios - 如何使用 core_bluetooth 获取公共(public)蓝牙设备地址

objective-c - 如何检索连接的蓝牙设备的序列号?

ios - 音频直播 Swift

ios - 在 Swift 中向属性文本添加属性

objective-c - 如何将数组加载到 UITableView,而不是 TableViewController