Получение сообщения «Значения перечисления« x »,« y »и« z »не обрабатываются в коммутаторе», когда фактически эти перечисления обрабатываются. В чем дело? - PullRequest
0 голосов
/ 19 января 2012

У меня есть перечисление, определенное так:

//ModelClass.h
typedef enum { Automatic, Manual, Off } MyModes;

Позже, в ViewController, у меня есть оператор switch внутри метода, который включает переменную моего типа перечисления.Мой оператор switch выглядит следующим образом:

//MyViewController.m
#import "ModelClass.h"

-(void) dryer:(MyClass *)m didChangeMode:(MyModes) newMode
{

    //Code within an instance method, utilizing the above enumeration
    switch (newMode) //newMode is an instance of MyMode enum.
    {
    case Automatic:
        //Some code...
        break;
    case Off:
        //Some code...
        break;
    case Manual:
        //Some code...
        break;
    }
}

Вышеуказанный оператор switch был скопирован / вставлен из моего кода, и все, что я сделал, это заменил функциональный код комментариями //Some code....

XCodeпо-прежнему выдает предупреждение в строке switch (newMode) о том, что «значения перечисления« Автоматически »,« Вручную »и« Выкл. »не обрабатываются в коммутаторе».

Кроме того, при каждом выражении case I 'я получаю сообщение об ошибке «Выражение не является целочисленным константным выражением», даже если это так, поскольку это перечисление.

Как это исправить?Странно то, что у меня есть другое перечисление в заголовке ModelClass (состоящее из 4 перечисляемых элементов), определенное в следующей строке после перечисления MyModes, и в моем контроллере представления у меня есть другой метод, который выполняет точно такой же типпереключателя / кейс операции.Я не получаю ни одного предупреждения или ошибки при использовании этого перечислителя.

Что может происходить?

РЕДАКТИРОВАТЬ

Я положилобъявление метода во фрагменте кода.Переменная newMode является параметром метода.Кроме того, вышеупомянутый другой перечислитель, который работает правильно, также передается в другой метод в качестве параметра.

1 Ответ

0 голосов
/ 19 января 2012

С помощью обоих Кейт и Мичил в комментариях выше, я смог решить эту проблему. По предложению Кейта я отвечаю на свой вопрос.

Эта проблема была моей собственной ошибкой, потому что я определил несколько кнопок в моем ViewController, каждая из которых соответственно называлась Automatic, Manual и Off. Компилятор предположил, что я ссылаюсь на свои UIButton s, а не на тип enum, потому что это были переменные локальной области видимости.

Переименование перечисленных значений и обновление кода исправили эту ошибку. В моем случае я переопределил свое перечисление следующим образом:

typedef enum { AutoMode, ManualMode, OffMode } MyModes;
...