在NSDictionary中存储枚举值

4

我有许多从服务器返回的JSON对象,我正在尝试在我的Objective 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的消息就失去了意义,不是吗?

我对Objective-C还比较陌生,可能完全做错了,欢迎提出建议。

1个回答

14

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

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

如果你想要把一个值存储在集合中,你需要将它包装在像NSNumber这样的物品中。如果你正在使用LLVM,你可以这样做:

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

而要再次进行比较,您可以使用以下方法将其转换为数字:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接