• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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?
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.571
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.
 

floison

Golden Delicious
Registriert
01.06.12
Beiträge
10
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.
 

Dalmarog

Gloster
Registriert
27.06.11
Beiträge
62
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.