Здесь есть две проблемы.Во-первых, перечисление не может быть ключом в valueForKey.valueForKey может принимать только строки, но не строковые значения перечислений.Следовательно, вам нужно реализовать метод для получения строкового значения из перечисления.В моем примере ниже этот метод является stringFromEnum.Вот один пример того, как получить строку из перечисления .
Иногда я видел удушение NSLog, когда я прошу его напрямую включить возвращаемое значение сообщения, отправленного объекту,Я всегда обнаруживал, что сначала присваиваю результат этого сообщения переменной экземпляра, а затем передаю значение этой переменной экземпляра в NSLog, вместо этого решил проблему, но, признаюсь, я не выяснил, какие уместные факторы определяют, когда оноработает или не работает оригинальным способом.Интересуют любые комментарии.
NSString *myKey = [self stringFromEnum:Enum];
NSString *myStringToLog = [[NSUserDefaults standardUserDefaults] valueForKey:myKey];
NSLog(@"%@", myStringToLog);
Еще одно прочтение вашего вопроса может заключаться в том, что переменная вашего экземпляра Enum на самом деле является строкой, которая является ключом для перечисления, которое будет возвращено из NSUserDefaults.Однако это не может иметь место, поскольку NSUserDefaults не будет хранить перечисление.См. документацию для поддерживаемых типов объектов.Если это то, что вы пытаетесь сделать, ваша проблема может быть частично в другом коде, где вы пытаетесь сохранить перечисление в первую очередь?