Plists似乎可以输入有限数量的数据类型。但是,我知道存在漏洞,例如将int存储为Number,然后使用[x integerValue]将其设置为int。在属性列表中存储typedef枚举是否有类似的解决方法?
因为它们实际上只是整数,有没有办法将它们存储为Numbers然后将它们作为typedef进行转换?
答案 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循环并返回匹配的索引。