Сохранение значений перечисления в словаре - PullRequest
19 голосов
/ 12 июля 2011

Как сохранить значение enum в словаре?

Когда я пробую следующее

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

enum someEnum someEnumObject;

и я пытаюсь сохранить его в словаре, используя

[NSDictionary dictionaryWithObjectsAndKeys:]

someEnumObject, @"enum", 

Я понял

предупреждение: семантическая проблема: несовместимое целочисленное преобразование в указатель, отправляющее «enum поведение» параметру типа «id»

Ответы [ 3 ]

49 голосов
/ 12 июля 2011

Используйте следующее, чтобы сохранить его в словаре,

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

И вы можете получить его как,

enumValue = [[dictionary valueForKey:@"enum"] intValue];
10 голосов
/ 21 января 2015

Лучше использовать литералы NSNumber для преобразования перечисления в объект, чтобы его можно было сохранить в NSDictionary:

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

Литералы предоставляют сокращения для написания материала, этот словарь можно записать так:

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

Подробнее о литералах читайте здесь: http://clang.llvm.org/docs/ObjectiveCLiterals.html

7 голосов
/ 12 июля 2011

enum - это целое число, а NSDictionary хранит объекты, поэтому вам необходимо преобразовать перечисление в объект.Для этого хорошо подойдет NSNumber:

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