繁体   English   中英

如何在JSON中序列化ObjC枚举?

[英]How to serialise ObjC enums in JSON?

我想将我的应用程序的皮肤设置存储在json文件中。 我如何存储颜色/样式等的枚举值,然后从字符串中转换回来? 我如何存储MKPinAnnotationColorRed或UITableViewStyleGrouped?

如果它只是存储整数等价物的问题,我就可以了,而不是实际存储枚举字符串值。

“我想将我的应用程序皮肤设置存储在json文件中” - 这是iPhone上的错误方法。 操作系统提供NSUserDefaults类,可以为您处理所有详细信息。

例如,要存储枚举值(实际上是整数值):

[[NSUserDefaults standardUserDefaults] setInteger: annotationColor
    forKey: @"SomeKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

您还可以轻松存储和检索序列化对象或本机类型(数组,字母,数字,字符串)。

简短的回答是,你做不到。

除非你做以下几件事之一:

  1. 将枚举的整数值存储在json文件中。 (这是你的“如果它只是存储整数等效的问题,而不是实际存储枚举字符串值”,这似乎是最简单,最好的解决方案)。
  2. 将一个单独的枚举值数组保存为字符串并与它们进行比较并返回正确条目的索引。
  3. 而不是使用枚举,使用字符串常量。
  4. 而不是枚举使用四个字符的常量,可以解析为整数或字符串。

您必须在枚举和字符串之间创建一些显式映射。 一种方法如下:

#define ENTRY(x) [NSNumber numberWithInt:x], @#x

NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:
    ENTRY(enumOne),
    ENTRY(enumTwo),
    ENTRY(enumThree),
    nil];

#undef ENTRY

NSNumber* index = [dict objectForKey:@"enumOne"]);

请注意,这是通用方法,如果您具有等距的枚举值,则不必存储其数值,而是可以使用例如NSArray

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM