NSTimer Interval

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSTimer Interval

    Hallo,

    ich bin momentan dabei eine Anzeige zu erstellen. Dabei habe ich Zahlenwerte in einem Array gespeichert.
    Diese möchte ich nun in einem Label hintereinander darstellen. Es soll jedoch nicht z.B. alle 2 Sekunden der Wert geändert
    werden sonder immer verschieden lang abgewartet werden die Dauer ist ebenfalls in einem Array gespeichert.

    Meine Frage ist nun wie ich das am besten umsetzte? Denke mal das es mit einem NSTimer funktioniert aber wie?
    Ps. ich habe noch nie mit einem Timer gearbeitet.

    lg. basti2551
  • basti2551 schrieb:

    ich bin momentan dabei eine Anzeige zu erstellen. Dabei habe ich Zahlenwerte in einem Array gespeichert.
    Diese möchte ich nun in einem Label hintereinander darstellen. Es soll jedoch nicht z.B. alle 2 Sekunden der Wert geändert
    werden sonder immer verschieden lang abgewartet werden die Dauer ist ebenfalls in einem Array gespeichert.

    Meine Frage ist nun wie ich das am besten umsetzte? Denke mal das es mit einem NSTimer funktioniert aber wie?

    Erstelle einfach nach jeder Aktualisierung der Anzeige einen neuen, sich nicht wiederholenden Timer mit dem gewünschten Intervall. Als Alternative kannst du aber auch mit performSelector:withObject:afterDelay: arbeiten.

    basti2551 schrieb:

    Ps. ich habe noch nie mit einem Timer gearbeitet.

    Dann empfiehlt es sich, dass Du Dir erst mal das hier durchliest. Da wird soweit alles zu Timern erklärt.

    Michael
  • Michael schrieb:

    basti2551 schrieb:

    ich bin momentan dabei eine Anzeige zu erstellen. Dabei habe ich Zahlenwerte in einem Array gespeichert.
    Diese möchte ich nun in einem Label hintereinander darstellen. Es soll jedoch nicht z.B. alle 2 Sekunden der Wert geändert
    werden sonder immer verschieden lang abgewartet werden die Dauer ist ebenfalls in einem Array gespeichert.

    Meine Frage ist nun wie ich das am besten umsetzte? Denke mal das es mit einem NSTimer funktioniert aber wie?

    Erstelle einfach nach jeder Aktualisierung der Anzeige einen neuen, sich nicht wiederholenden Timer mit dem gewünschten Intervall. Als Alternative kannst du aber auch mit performSelector:withObject:afterDelay: arbeiten.

    basti2551 schrieb:

    Ps. ich habe noch nie mit einem Timer gearbeitet.

    Dann empfiehlt es sich, dass Du Dir erst mal das hier durchliest. Da wird soweit alles zu Timern erklärt.

    Michael
    Vielen Dank für die Hilfe ich werde es mal mit performSelector:withObject:afterDelay: veruschen


    danke für den Link werde ich mir mal durchlesen.


  • Jetzt hätte ich noch eine Frage und zwar bin ich gerade am versuchen mein Problem mit performSelector:withObject:afterDelay:
    zu lösen. Es wird aber immer nur der letzte Eintrag im Array dargestellt. Also nehme ich mal an das das Darstellen des Labels erst nach der for-Schleife erfolgt.
    Wie kann ich das änder? Also das das Label schon in der Schleife aktualisiert wird?
  • basti2551 schrieb:

    Es wird aber immer nur der letzte Eintrag im Array dargestellt. Also nehme ich mal an das das Darstellen des Labels erst nach der for-Schleife erfolgt.

    Ich glaube, dass keiner ausser Dir weiss, von welcher "for-Schleife" hier die Rede ist, schliesslich kennst nur Du Deinen Code. Zwar ist es so, dass Du nicht erzwingen kannst, dass zu einem gegebenen Zeitpunkt die Anzeige aktualisiert wird, aber ich sehe auch nicht, dass dies notwendig wäre:
    • Du hast ein Array mit Werten und eines mit Wartezeiten.
    • Du setzt ein globale Variable x auf 0, ruftst eine Methode auf mit performSelector:withObject:afterDelay und der ersten Wartezeit auf (x-tes Element).
    • Diese Methode gibt den x. Wert aus (inkl. Aktualiseren), erhöht x und ruft sich selbst mit der nächsten Wartezeit auf, wenn x noch nicht gleich der Elementenanzahl ist
    Wo hast Du eine for-Schleife...?

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich habe jetzt mal den Code wie folgt

    Im Startbutton:

    [self performSelector:@selector(AnzeigeAktualisieren:) withObject: nil afterDelay:[[ArrDiverenzTime objectAtIndex:intZaehler] intValue]];


    intZaehler ist Global definiert





    Methode:



    - (void) AnzeigeAktualisieren {



    intZaehler++;


    if(intZaehler != 10)
    {



    int intVerzoegerung = [[ArrDiverenzTime objectAtIndex:intZaehler] intValue];






    double douAktuelleAnzeige = [[ArrGeschwindigkeit objectAtIndex:intZaehler] doubleValue ];





    //Ausgeben




    [Geschwindigkeitsanzeige setStringValue: [NSString stringWithFormat:@"%f", douAktuelleAnzeige]];



    }
    else
    {
    //Hier kommt noch eine abbruchbedingung
    }







    [self performSelector:@selector(AnzeigeAktualisieren:) withObject: nil afterDelay:intVerzoegerung];



    }




    Wenn ich den Code jetzt Debuge dann überspringt er beim Button die Zeile einfach und führt den Code in der Methode nicht aus. An was liegt das?
  • Benutze doch bitte Code-Tags, damit man den Code auch vernünftig lesen kann.

    Das Problem sind aber die Smilies. Ja, das meine ich ernst. Deine Methode ist ja

    Quellcode

    1. - (void) AnzeigeAktualisieren;

    Du übergibst der Methode performSelector:withObject:afterDelay: aber den Selector

    Quellcode

    1. @selector(AnzeigeAktualisieren:)

    was einer Methode entspricht, die einen Parameter erwartet. Der Selector passt also nicht zu Deiner Methode.

    Michael