• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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

Breuhahn
Registriert
28.05.04
Beiträge
8.583
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.