Objective-C:如何在plist中存储typedef枚举?

时间:2013-02-19 04:43:15

标签: objective-c plist typedef

Plists似乎可以输入有限数量的数据类型。但是,我知道存在漏洞,例如将int存储为Number,然后使用[x integerValue]将其设置为int。在属性列表中存储typedef枚举是否有类似的解决方法?

因为它们实际上只是整数,有没有办法将它们存储为Numbers然后将它们作为typedef进行转换?

2 个答案:

答案 0 :(得分:3)

您必须存储原始枚举整数值,然后再将它们作为整数加载。一旦您以NSNumbers再次加载它们,就可以使用[num intValue]来获取整数。然后你可以将它与你的枚举进行比较,例如:

intRep = [loadedNumber intValue];
if (intRep == MY_ENUM_CONSTANT) {
    // Do something...
}
// ... etc.

将值"MY_ENUM_CONSTANT"作为字符串存储在plist中没有任何意义 - 如果-isEqualToString肯定与系统作战,则对其进行逆向工程。如果你需要更多的灵活性,虽然你可能能够在plist中存储二进制数据对象,但这可能会使你的需要过多。

答案 1 :(得分:0)

您需要将它们转换为适合plist的格式,您可以使用最简单的整数值并使用NSNumber,但您也可以编写一些函数来转换为字符串值。如果你使用枚举的默认整数,0,1,2等。然后你可以使用枚举作为字符串数组的索引,从字符串返回到枚举/ int,通过你的字符串数组使用for循环并返回匹配的索引。