4

我有一堆从服务器返回的 JSON 对象,我试图在我的目标 C 中对它们进行一些标准化。

我有这个枚举:

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

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

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 的消息的目的,不是吗?

我对objective-c还很陌生,所以就我所知,我可能会完全错误地这样做,并且愿意接受建议。

4

1 回答 1

14

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

您得到的错误是说一个值不能转换为一个idid是另一种写法NSObject *),一个对象指针。

如果要将值存储在集合中,则需要将其包装在类似NSNumber. 如果您使用的是 LLVM,您可以这样做,例如:

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

并再次比较它,你可以把它变成一个数字:

VP_STATUS status = [[p valueForKey:@"status"] integerValue];
于 2013-06-10T14:09:47.127 回答