Gedrückter UIButton mit Interface-Builder erstellt blockiert NSTimer

  • Gedrückter UIButton mit Interface-Builder erstellt blockiert NSTimer

    Hallo Obj-C Gemeinde,

    ich habe ein sehr neues und merkwürdiges Problem.
    Ich habe ja schon so einiges unter Obj-C und CocoaTouch entwickelt.

    Nun enntwickel ich ein kleines Programm für den Mac.
    Für die Anordnung der Elemente wie UIButtons auf der View nutze ich den Interface-Builder.

    Das funktioniert soweit auch ganz gut.

    Mein Programm tut das was es soll.


    Über einen NSTimer werden im Programm aller 0.25 Sekunden gewisse Werte neu berechnet und auf der View über Textfelder ausgegeben.
    Das funktioniert auch sehr gut.
    Allerdings ist der NSTimer auch sowas wie eine Lebensader.
    Wird der Zyklus des NSTimer blockiert, so wird für diesen Zeitraum nichts berechnet und auf der View zur Ausgabe gebracht.

    *gg ... das ist auch mein Problem.
    Klicke ich einen UIButton auf der View an, so wird der NSTimer blockiert.
    Das was im Intervall des NSTimers passieren soll wird so lange pausiert wie der Button gedrückt wird.


    Was kann ich denn tun damit das nicht passiert? An diesem Problem hänge ich schon etwas länger und entwickelte erstmal die Controller weiter.

    Allerdings löst das mein Problem auch nicht.


    Bitte helft mir bei dieser Angelegenheit. :?:
    Ich bin mir sicher das dieses Problem trivial ist.


    Vielen lieben Dank fürs lesen und für eure Hilfe ;)
  • Benutzt Du + scheduledTimerWith... (NSTimer)? Dann läuft der Timer nur im NSDefaultRunLoopMode. Während der Knopf gedrückt ist, läuft der Haupt-RunLoop im NSEventTrackingRunLoopMode (soweit ich weiß), daher läuft der Timer in der Zeit nicht. Du kannst versuchen, den Timer per +timerWith... (NSTimer) zu erstellen und dann beim Haupt-RunLoop per -addTimer:forMode: für die richtigen Modes zu registrieren (ich würd's erstmal mit NSRunLoopCommonModes probieren).
    Multigrad - 360°-Produktfotografie für den Mac
  • Okay, ich habe mich da nochmal 5 Minuten eingelesen.
    Dein Hinweis war Gold wert.

    Klar hatte ich das heute schon mal so ... naja ... eher so ähnlich :P

    So muss es sein:

    PHP-Quellcode

    1. if (!mCheckMovieTimeTimer) {
    2. mCheckMovieTimeTimer = [[NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(checkMovieTime:) userInfo:nil repeats:YES] retain];
    3. [[NSRunLoop currentRunLoop] addTimer:mCheckMovieTimeTimer
    4. forMode:NSRunLoopCommonModes];
    5. }



    i wish u a nice saturday night :thumbup: