【发布时间】:2023-04-05 20:00:01
【问题描述】:
我想将我的应用的皮肤设置存储在一个 json 文件中。我将如何存储颜色/样式等的枚举值,然后将它们从字符串中转换回来?我将如何存储 MKPinAnnotationColorRed 或 UITableViewStyleGrouped?
如果只是存储等效的整数,我可以接受,而不是实际存储枚举字符串值。
【问题讨论】:
标签: ios objective-c json
我想将我的应用的皮肤设置存储在一个 json 文件中。我将如何存储颜色/样式等的枚举值,然后将它们从字符串中转换回来?我将如何存储 MKPinAnnotationColorRed 或 UITableViewStyleGrouped?
如果只是存储等效的整数,我可以接受,而不是实际存储枚举字符串值。
【问题讨论】:
标签: ios objective-c json
“我想将我的应用程序皮肤设置存储在一个 json 文件中” - 这是 iPhone 上的错误方法。操作系统提供了NSUserDefaults 类,为您处理所有细节。
例如,存储一个枚举值(实际上是整数值):
[[NSUserDefaults standardUserDefaults] setInteger: annotationColor
forKey: @"SomeKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
您还可以轻松存储和检索序列化对象或本机类型(数组、字典、数字、字符串)。
【讨论】:
简短的回答是,你不能。
除非你做以下几件事之一:
【讨论】:
您必须在枚举和字符串之间创建一些显式映射。一种方法如下:
#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 代替。
【讨论】: