Plist 似乎可以输入的数据类型数量有限。但是,我知道存在漏洞,例如将 int 存储为 Number,然后使用 [x integerValue] 将其设置回 int。是否有类似的解决方法将 typedef 枚举存储在属性列表中?
由于它们实际上只是整数,有没有办法将它们存储为数字,然后将它们转换为它们的 typedef?
Plist 似乎可以输入的数据类型数量有限。但是,我知道存在漏洞,例如将 int 存储为 Number,然后使用 [x integerValue] 将其设置回 int。是否有类似的解决方法将 typedef 枚举存储在属性列表中?
由于它们实际上只是整数,有没有办法将它们存储为数字,然后将它们转换为它们的 typedef?
您必须存储原始枚举整数值,然后将它们作为整数再次加载。一旦你再次加载它们,NSNumbers
你就可以使用它[num intValue]
来获取整数。然后您可以将其与您的枚举进行比较,例如:
intRep = [loadedNumber intValue];
if (intRep == MY_ENUM_CONSTANT) {
// Do something...
}
// ... etc.
将值"MY_ENUM_CONSTANT"
作为字符串存储在 plist 中没有任何意义 - 如果-isEqualToString
肯定与系统发生冲突,则对其进行逆向工程。如果您需要更大的灵活性,尽管您可以在 plist 中存储二进制数据对象,但这可能有点过分满足您的需要。
您需要将它们转换为适合 plist 的格式,您可以使用最简单的整数值并使用 NSNumber,但您也可以编写几个函数来转换为字符串值和从字符串值转换。如果您对枚举、0、1、2 等使用默认整数。然后您可以使用枚举作为字符串数组的索引,从字符串返回枚举/int,使用 for 循环通过您的字符串数组并返回匹配索引。