24
votes

How does one save an enum value to a dictionary?

When I try the following

enum someEnum
{
    field0 = 0,
    field1 = 1,
    field2 = 2,
};

enum someEnum someEnumObject;

and I try to save it to a dictionary using

[NSDictionary dictionaryWithObjectsAndKeys:]

someEnumObject, @"enum", 

I get this

warning: Semantic Issue: Incompatible integer to pointer conversion sending 'enum behaviour' to parameter of type 'id'

4

4 Answers

51
votes

Use the following to save it to dictionary,

[NSNumber numberWithInt:enumValue], @"enum",

And you can retrieve it as,

enumValue = [[dictionary valueForKey:@"enum"] intValue];
12
votes

Better use NSNumber literals to convert an enum to an object so that it can be stored in NSDictionary:

[NSDictionary dictionaryWithObjectsAndKeys:@(someEnumObject), @"enum", nil];

Literals provide shorthands to write stuff, this dictionary can be written like:

@{@"enum":@(someEnumObject)};

Read more about literals here: http://clang.llvm.org/docs/ObjectiveCLiterals.html

10
votes

An enum is essentially an integer and an NSDictionary stores objects, so you need to convert your enum to an object. An NSNumber would work well for this:

[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:someEnumObject], @"enum", nil];
3
votes

In modern times @(enumValue) is the easier approach.