2014-09-11 1 views
0

Я не понимаю какого-либо поведения в моем коде. Я определил перечисление как таковой в верхней части моей .m файл:с использованием перечисления как объекта в PerformSelector: WithObject:

typedef NS_ENUM (NSInteger, connectionState) { 
tryingToConnect, 
connecting, 
disconnecting 
}; 

Дальше мой код я вызываю метод:

[self performSelector:@selector(animateForState:) withObject:tryingToConnect afterDelay:1.5]; 

Это работает прекрасно.

Но если я называю то же самое с «подключением» или «отключением»:

[self performSelector:@selector(animateForState:) withObject:connecting afterDelay:1.5]; 

Xcode предупреждает меня, что «неявное преобразование из„NSInteger“(он же„INT“) в„ид“отвергается с ARC». Почему верхняя переменная enum (tryToConnect) работает, а не следующие (подключение/отключение) в моем определении типа?

Ради включая все это то, что метод, называемый выглядит следующим образом:

- (void)animateForState:(connectionState)state{ 

    switch (state) { 
     case tryingToConnect:{ 

      NSLog(@"trying to connect"); 
      break; 
     } 
     case connecting:{ 

      NSLog(@"connecting"); 
      break; 
     } 

     case disconnecting:{ 

      NSLog(@"disconnecting"); 
      break; 
     } 

     default: 
      break; 
    } 
} 

ответ

4

Это работает потому, что значение первого объекта 0, который является таким же, как проходит ноль. Это нормально, чтобы пройти ноль, но не другой примитив. Передайте NSNumber вместо этого, withObject: @ (connect) и включите state.integerValue

+0

Aaah У меня была умение иметь дело с первым значением 0, но не поняла, что это эквивалентно пропуску ноль ... Большое спасибо @rdelmar, он отлично работает! – Audioy

Смежные вопросы