Domanda

Ho un problema qui ...

Dopo un tasto viene premuto voglio un ciclo di correre fino a raggiungere una condizione:

- (IBAction)buttonclick1 ...

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

Vorrei un ciclo a funzionare fino a

((value2ForIf - valueForIf) >= 3)

e quindi eseguire il codice associato con l'istruzione IF.

Quello che sto puntando a raggiungere è il programma di mantenere il controllo se la dichiarazione di cui sopra è vero, prima di continuare con il codice. In cima a questo v'è un else sotto la SE, anche se non so se questo influenzerà un loop.

Non sono sicuro del formato del circuito necessari qui e tutto quello che ho provato ha causato errori. Qualsiasi aiuto sarebbe molto apprezzato.

Stu

È stato utile?

Soluzione

- (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:
  }
}

Altri suggerimenti

Invece di eseguire un ciclo stretto, che potrebbe bloccare l'esecuzione della tua applicazione a meno che correre su un altro thread, si potrebbe usare un NSTimer per chiamare un metodo in un intervallo di tempo di tua scelta e controllare le condizioni in quel metodo. Se la condizione è soddisfatta, si può invalidare la timer e continuare.

Da quello che lei ha dichiarato, quello che vuoi è un ciclo while

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

Questo verrà eseguito il codice nelle parentesi finché la differenza di valori è inferiore a 3, il che significa che durerà fino loro differenza è 3 o più. Ma, come ha detto Jasarien. Questa è una cattiva idea dal momento che sarà il blocco del programma. Se i valori vengono aggiornati dal codice stesso che è bene. Ma se sono in fase di aggiornamento da parte di alcuni UI da parte dell'utente, il vostro ciclo while bloccherà l'interfaccia utente e non consentire all'utente di nulla di ingresso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top