在NSDictionary中存储枚举值

Ada*_*dam 4 objective-c

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

我有这个枚举:

//VP_STATUS
typedef enum {
    VP_STATUS_NA,
    VP_STATUS_STEXP,
    ...
    VP_STATUS_COUNT
} VP_STATUS;
Run Code Online (Sandbox Code Playgroud)

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

VP_STATUS status = [myStringToEnumMappingFunction:[p objectForKey:@"status_label"]];
[p setValue:status forKey:@"status"];
Run Code Online (Sandbox Code Playgroud)

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

"Implicit conversion of VP_STATUS to id is disallowed with ARC"
Run Code Online (Sandbox Code Playgroud)

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

我对Objective-c相当新,所以我可能会对我所知道的完全错误,并且愿意接受建议.

Abi*_*ern 14

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

你得到的错误是说一个值不能转换为id(id另一种写法NSObject *),一个对象指针.

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

[p setValue:@(status) forKey:@"status"];
Run Code Online (Sandbox Code Playgroud)

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

VP_STATUS status = [[p valueForKey:@"status"] integerValue];
Run Code Online (Sandbox Code Playgroud)