2011-06-16 2 views
1

Итак, у меня есть IBAction yesNo, что я хочу, чтобы меня побежали в трясти. Не все слишком уверены, почему это не работает. Соблюдайте всю документацию.Встряхните ... iOS

-(BOOL)canBecomeFirstResponder 
{ 
    return YES; 
} 

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (event.subtype == UIEventSubtypeMotionShake) 
    { 
     [self yesNo]; 
    } 
} 

А потом сам IBAction:

- (IBAction)yesNo 
{ 
    int rNumber = rand() % 26; 
    NSUserDefaults *def=[NSUserDefaults standardUserDefaults]; 
    if ([[def objectForKey:@"activeVersion"] isEqualToString:@"0"]) 
    { 
     switch (rNumber) { 
      case 0: 
       result.text = @"Never"; 
       break; 
      case 1: 
       result.text = @"If you're lucky..."; 
       break; 
      case 3: 
       result.text = @"Think twice"; 
       break; 
      ... 
      default: 
       break; 
     } 
    } 
    else if ([[def objectForKey:@"activeVersion"] isEqualToString:@"1"]) 
    { 
     switch (rNumber) { 
      case 0: 
       result.text = @"Never1"; 
       break; 
      case 1: 
       result.text = @"If you're lucky...1"; 
       break; 
      ... 
      case 25: 
       result.text = @"Very doubtful2"; 
       break; 

      default: 
       break; 
     } 
    } 
    else if ([[def objectForKey:@"activeVersion"] isEqualToString:@"3"]) 
    { 
     switch (rNumber) { 
     case 0: 
      result.text = @"Never3"; 
      break; 
     ... 
     case 25: 
      result.text = @"Very doubtful3"; 
      break; 

     default: 
      break; 
    } 
} 
} 

В основном то, что у меня есть это состояние шар типа вещь, и когда iPhone встряхивают мне нужно что IBAction бежать.

+0

Как он не работает? Вызывается 'yesNo'? Вы получаете сообщение об ошибке? – PengOne

+0

Где вы устанавливаете значение для ключа 'activeVersion'? Вероятно, это не удовлетворяет ни одному из условий. Вы проверили, вызван ли метод путем ведения журнала? –

ответ

4

Вы сделали это мнение первым ответчиком? То есть [yourView becomeFirstResponder]; (возможно, от некоторого метода). Возможно, вам захочется проверить, действительно ли это первый ответчик, когда вы встряхиваете свое устройство.

1

Прежде всего, я бы поставил под вопрос, следует ли это определить как IBAction. Если вы вызываете это только из кода, вы можете захотеть использовать вместо него (void) (просто выбор стиля).

Во-вторых, вы уверены, что метод на самом деле называется? Бросьте NSLog там, чтобы убедиться.

В-третьих, вы уверены, что [def objectForKey: @ "activeVersion"] возвращает строку? Возвращает ли значение то, что вы ожидаете? Бросьте NSLog там, чтобы убедиться.

Я предполагаю, что один из NSLogs даст вам ответ на ваш вопрос, так как остальная часть вашего кода кажется прекрасной.

+0

+1 Я согласен с этими пунктами, специально сделаю его недействительным и правильно использую NSLog и правильно отлаживаю. – Ishu

+0

Я говорю, используя контрольные точки вместо NSLog, лично. – Luke

+0

Да, работает метод yesNo. У меня также есть кнопка, так что если коснуться области шара, метод запускается. Да, 'def objectForKey' возвращает строку. –

2

Когда я переключался с графического определения в IB на программно встроенный в Xcode, я забыл сделать представление первым ответчиком вообще. Вот код, который в конечном итоге зафиксировал его:

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
    NSLog(@"self is first responder %i",[self isFirstResponder]); 
} 
Смежные вопросы