• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

NSTimer in eigener Klasse

Dalmarog

Gloster
Registriert
27.06.11
Beiträge
62
Hallo liebe Community,
ich verzweifel schon länger an einem Problem, das ich einfach nicht selber gelöst bekomme.

Ich habe eine Klasse Timer, die wiefolgt aussieht:

Timer.h
Code:
#import <Foundation/Foundation.h>

@interface Timer : NSObject


@property (strong, nonatomic) NSTimer* timer;
@property (assign, nonatomic) NSInteger seconds;
@property (assign, nonatomic) BOOL isRunning;

-(void)startTimer;
-(void)stopTimer;
-(void)resetTimer;

-(void)onTick;

@end

Timer.m
Code:
#import "Timer.h"

@implementation Timer

-(void)startTimer {
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(onTick) userInfo:nil repeats:YES];
}

-(void)stopTimer {
    [self.timer invalidate];
    self.timer = nil;
}

-(void)resetTimer {}

-(void)onTick {
    self.seconds++;
    NSLog(@"%ld",(long)self.seconds);
}

@end

Wenn ich den Timer in der Konsole ausgebe, dann funktioniert er auch. Nur so aktualisiert er natürlich das Label meines Storyboards nicht. Kann mir wer dabei helfen das hinzubekommen?
 
Es ist unklar, warum man eine solche Hilfsklasse braucht, aber um das Problem zu lösen, müsstest Du ja nur NSLog() durch einen Aufruf zur Aktualisierung des betreffenden Labels ersetzen.
 
Ich bin ebenfalls der Meinung, dass diese Klasse wenig Sinn ergibt. Warum nicht die NSTimer-Instanz dort benutzen, wo das zu aktualisiernde Label vorliegt?

Wie dem auch sei. Target und Selector deines NSTimers könnten so geändert werden, dass das Label aktualisiert wird.

Tipp:
id target;
SEL selector;
können als Properties verwendet werden.
 
Ich hatte vorher 6 Timer, die ich alle in der ViewController.m laufen hatte. Hat funktioniert, nur alles war 6 Mal vorhanden und vom Quellcode total unübersichtlich. Gut, bin jetzt auch nicht so erfahren, was Xcode und Objective C angeht, aber ich dachte, da wäre eine externe Klasse einfach übersichtlicher, von der man dann einfach 6 Objekte erzeugt. Nur wie gesagt, das Aktualisieren des Labels macht mir jetzt Probleme. Werde die Tipps mal durchdenken und versuchen das Ganze so zu lösen. Danke.