在NSDictionary中存储枚举值

时间:2013-06-10 14:00:05

标签: objective-c

我有一堆JSON对象从服务器返回,我正在尝试将它们标准化为我的目标C.

我有这个枚举:

//VP_STATUS
typedef enum {
    VP_STATUS_NA,
    VP_STATUS_STEXP,
    ...
    VP_STATUS_COUNT
} VP_STATUS;

我有一个函数将JSON对象(这是一个NSMutableDictionary)中的字符串映射到此枚举,然后我尝试在NSMUtableDictionary上设置键“status”,如下所示:

VP_STATUS status = [myStringToEnumMappingFunction:[p objectForKey:@"status_label"]];
[p setValue:status forKey:@"status"];

但是,在setValue:forKey行中我收到此错误:

"Implicit conversion of VP_STATUS to id is disallowed with ARC"

首先我必须将状态转换为其他内容吗?如果是这样,那么那种使用定义为VP_STATUS的消息的目的就会失败,不是吗?

我对目标c相当新,所以我可能会对我所知道的完全错误,并愿意接受建议。

1 个答案:

答案 0 :(得分:14)

枚举就像数字的别名。 Objective-C集合类只能存储对象引用。

你得到的错误是说一个值无法转换为idid是另一种写NSObject *的方式),一个对象指针。

如果要在集合中存储值,则需要将其包含在NSNumber之类的内容中。如果您使用的是LLVM,则可以使用以下命令执行此操作:

[p setValue:@(status) forKey:@"status"];

再次进行比较,您可以将其转换为数字:

VP_STATUS status = [[p valueForKey:@"status"] integerValue];