Цикл, пока условие не достигнуто, iPhone - PullRequest
0 голосов
/ 16 ноября 2009

У меня проблема здесь ...

После нажатия кнопки я хочу запустить цикл, пока не будет достигнуто условие:

- (IBAction)buttonclick1 ...

if ((value2ForIf - valueForIf) >= 3) { ...

Я бы хотел запустить цикл до

((value2ForIf - valueForIf) >= 3)

и затем выполните код, связанный с оператором IF.

Чего я хочу достичь, так это программы проверки правильности приведенного выше утверждения, прежде чем продолжить работу с кодом. Вдобавок к этому под IF есть еще оператор else, хотя я не знаю, повлияет ли это на цикл.

Я не уверен в требуемом формате цикла, и все, что я пробовал, привело к ошибкам. Любая помощь будет принята с благодарностью.

Stu

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009
- (IBAction)buttonclick1 ...
{
  //You may also want to consider adding a visual cue that work is being done if it might
  //take a while until the condition that you're testing becomes valid.
  //If so, uncomment and implement the following:

  /*
   //Adds a progress view, note that it must be declared outside this method, to be able to
   //access it later, in order for it to be removed
   progView = [[MyProgressView alloc] initWithFrame: CGRectMake(...)];
   [self.view addSubview: progView];
   [progView release];

   //Disables the button to prevent further touches until the condition is met,
   //and makes it a bit transparent, to visually indicate its disabled state
   thisButton.enabled = NO;
   thisButton.alpha = 0.5;
  */

  //Starts a timer to perform the verification
  NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 0.2
                            target: self
                            selector: @selector(buttonAction:)
                            userInfo: nil
                            repeats: YES];
}


- (void)buttonAction: (NSTimer *) timer
{
  if ((value2ForIf - valueForIf) >= 3)
  {
    //If the condition is met, the timer is invalidated, in order not to fire again
    [timer invalidate];

    //If you considered adding a visual cue, now it's time to remove it
    /*
      //Remove the progress view
      [progView removeFromSuperview];

      //Enable the button and make it opaque, to signal that
      //it's again ready to be touched
      thisButton.enabled = YES;
      thisButton.alpha = 1.0;
    */

    //The rest of your code here:
  }
}
2 голосов
/ 16 ноября 2009

Вместо того, чтобы выполнять узкий цикл, который блокировал бы выполнение вашего приложения, если он не запущен в другом потоке, вы можете использовать NSTimer для вызова метода в выбранный вами интервал времени и проверки условия в этом методе. Если условие выполнено, вы можете сделать таймер недействительным и продолжить.

1 голос
/ 16 ноября 2009

Из того, что вы заявили, вам нужен цикл while

while( (value2ForIf - valueForIf) < 3 ) { ...Code Here... }

Это будет запускать код в фигурных скобках до тех пор, пока разница в значениях будет меньше 3, то есть будет выполняться до тех пор, пока их разница не станет 3 или больше. Но, как сказал Jasarien. Это плохая идея, так как вы будете блокировать свою программу. Если значения обновляются самим кодом, это нормально. Но если они обновляются некоторым пользовательским интерфейсом пользователя, ваш цикл while блокирует пользовательский интерфейс и не позволяет пользователю вводить что-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...