Domanda

(Quasi risolto, ma non del tutto) (La mia soluzione temporanea è quella di utilizzare un metodo di vuoto e chiamarlo in ogni tasto, e in che modo posso modificare il codice utilizzato da più pulsanti piuttosto che quando si effettuano i miglioramenti dover modificare ogni singolo pulsanti if)

Scommetto che è davvero un semplice errore che ho fatto, ma non riesco a trovarlo.

Sto cercando di mostrare un avviso in precedenza definito, quando un intero raggiunge il 50; questo è l'istruzione if che uso nel metodo viewDidLoad:

if(count == 50){
    [alert show];
}

Quando il numero intero raggiunge i 50, non succede nulla. Dove ho sbagliato?

Il numero intero viene modificato come questo in un IBAction:

 count+=10;

Se rimuovo l'istruzione if e lasciarmi l'avviso per mostrare, visualizza al caricamento di vista. Quindi l'avviso non è il problema.

Qualcuno sottolineato che se questo codice viene eseguito solo una volta nel metodo viewDidLoad e il numero intero viene modificato in 50 in una fase successiva non attenderà il numero intero per essere 50, invece vedrà il valore non essendo 50 e non eseguire l'avviso mai.

Quindi, come faccio a guardare il numero intero con il codice, ed eseguire un avviso quando il numero intero è 50, Ma non chiamare l'avviso nell'azione che sta aumentando il numero intero?

Oh, e dal modo in cui ho provato a chiamare l'istruzione if nell'azione che aumenta il numero intero e che le opere, ma ho circa 100 pulsanti che aumentano il numero intero e controllando se il valore è 50 in ogni singolo pulsante sembra un consumo spazio po 'e che richiede tempo per tutto ciò che copia e incolla. Inoltre ho intenzione di avere più di un semplice avviso accadere quando l'intero raggiunge 50. Sono sicuro che c'è un modo più efficiente di solo controllando se il valore del conteggio intero è di 50.

È stato utile?

Soluzione

Prova ad aggiungere

if(count == 50){
    [alert show];}

Nello stesso IBAction destra dopo aver aggiunto 10 a contare.

Altri suggerimenti

Quando si dice

  

Ma quando il numero intero raggiunge il 50 non succede nulla

Questo mi porta a credere che si sta modificando il valore intero dopo il metodo -viewDidLoad corre. La vostra istruzione if viene valutata solo una volta, quando i carichi di visualizzazione, quindi se si sta cambiando il valore del numero intero dopo quel punto avrete bisogno di aggiungere la vista avviso a tutto ciò che sta cambiando il numero intero.

Questo dovrebbe andare bene - Objective-C è uno strato sottile sulla parte superiore del C, la sintassi C in modo valido dovrebbe funzionare. Che tipo di variabile è contare? Si vuole definire come un int, non un NSNumber. NSNumber è una classe che avvolge un numero in modo che possa essere utilizzato come un oggetto Objective-C -. Ma non si può confrontarli utilizzando la sintassi ==

Speranza che aiuta!

Controllare out valore-chiave osservando

Se si effettua il contatore una proprietà, si dovrebbe essere in grado di configurare un osservatore che si attiva ogni volta che il valore cambia. In questo osservatore, si può fare il vostro controllo a fuoco l'avviso.

Prova

NSLog(@"count is %d",count); 

e vedere se il problema. E 'difficile dire se conteggio è incasinato o l'avviso, ma il problema non è con il vostro se dichiarazione stessa.

un paio di cose da provare,

  • impostare un punto di interruzione sulla if
  • modificare l'istruzione if per count >= 50
  • è contare davvero un int o è un galleggiante?

La risposta più semplice:. Hanno tutte le cose che incrementano count passare attraverso un metodo nel controller di farlo e avere quel controllo metodo se è il momento di mostrare l'avviso

La risposta più complessa che coinvolge a guardare il valore: Valore-chiave Osservando . Si potrebbe istituire un osservatore per guardare il valore e rispondere con l'allarme quando colpisce 50. Ma questo richiederà più codice ed essere più complicato e soggetto ad errori di una semplice introduzione di un metodo centralizzato per gestire il comportamento.

Non capisco, perché non si può mostrare l'avviso nel codice che incrementa il contatore? Ha bisogno di jut un riferimento al UIAlertView ... o POST una notifica il codice di allarme tenendo sta ascoltando.

viewDidLoad viene eseguito solo quando il punto di vista è caricato - cioè quando viene creato. Dopo di che non otterrà eseguire di nuovo, salvo circostanze particolari.

Se si vuole controllare il conteggio ogni volta che si preme un pulsante e aumentare il conteggio, poi farlo nel IBAction.

Si potrebbe fare un metodo che controlla il contatore in questo modo

-(BOOL) checkCounter
{
  return count == 50;
}

E lo chiamano nei tuoi pulsanti in questo modo dopo aver incrementato esso:

if ([self checkCounter])
{
//do stuff when it's 50
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top