我有一堆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相当新,所以我可能会对我所知道的完全错误,并愿意接受建议。
答案 0 :(得分:14)
枚举就像数字的别名。 Objective-C集合类只能存储对象引用。
你得到的错误是说一个值无法转换为id
(id
是另一种写NSObject *
的方式),一个对象指针。
如果要在集合中存储值,则需要将其包含在NSNumber
之类的内容中。如果您使用的是LLVM,则可以使用以下命令执行此操作:
[p setValue:@(status) forKey:@"status"];
再次进行比较,您可以将其转换为数字:
VP_STATUS status = [[p valueForKey:@"status"] integerValue];