在XML中存储枚举并将其重新读出的最简单方法是什么?说我有:在C枚举和XML之间进行转换
enum ETObjectType {ETNormalObjectType, ETRareObjectType, ETEssentialObjectType};
...我想采取一个变量,enum ETObjectType objectType = ETNormalObjectType;
,并将其转换为XML,看起来像这样:<objectType>ETNormalObjectType</objectType>
。
我在做什么当前是这样的:
NSString* const ETObjectTypeAsString[] = {@"ETNormalObjectType",@"ETRareObjectType",@"ETEssentialObjectType"};
[anXMLElement addChild:[NSXMLElement elementWithName:@"objectType" stringValue:ETObjectTypeAsString[objectType]]];
...但是这不完全理想;每次更改枚举时,我都不满意更新这两个列表。但这是可以接受的。很多,更糟的是读回XML,我目前正在这样做:
if ([[[anXMLElement childNamed:@"objectType"] stringValue] isEqualToString:@"ETRareObjectType"])
{
[self initObjectType:ETRareObjectType];
}
else if ([[[anXMLElement childNamed:@"objectType"] stringValue] isEqualToString:@"ETEssentialObjectType"])
{
[self initObjectType:ETEssentialObjectType];
}
else
{
[self initObjectType:ETNormalObjectType];
}
Yuck!这让我厌恶。至少要有一种更清晰的阅读方式,或者可能是一种统一的阅读和写作方式?
我使用的是Obj-C和Cocoa,但我不介意一些纯粹的C函数。如果是唯一的方法,我甚至会使用预处理器的东西。
好主意保持头文件中的枚举和字符串序列。有些东西让我困扰着将它们变成NSArray方法,但我可能会这样做。谢谢! – andyvn22 2009-08-07 08:55:18
定义的检查功能在哪里? – zekel 2010-05-18 15:30:09
检查在AssertMacros.h中定义,以及verify,require和变量_noerr,_action,_quiet,_string。他们应该经常撒在你的代码中,这样你才能在你的用户之前找到你的错误。 – 2010-05-19 07:04:00