Ich arbeite an einer iOS App (FW: 5.0+ & ARC), die Sekunde für Sekunde aktualisiert werden muss.NSRunLoop funktioniert OK auf Simulator, Crashes iDevice
Derzeit habe ich dies in einem Verfahren (das in einem perform wenn -ViewDidLoad genannt wird):
-(void)FireOnload {
counter = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(countDownTime) userInfo:nil repeats:YES];
[counter fire];
[[NSRunLoop mainRunLoop] addTimer:counter forMode: NSDefaultRunLoopMode]; // <-- Causing Problem
}
-(void)countDownTime
{
double timeNow = [[NSDate date] timeIntervalSince1970];
double timeLeft = timeEnding - timeNow;
if(timeLeft < 60) // Less then 60 seconds, do something.
{
//Do Stuff
}
}
die counter
Variable aufgerufen wird im Header als NSTimer. Ich rufe explizit [counter fire]
so dass es aufgerufen wird, sobald die Ansicht geladen ist, nicht nach 1 Sekunde.
Dies funktioniert gut im iOS-Simulator und wird jede Sekunde ausgelöst, aber wenn es zum iDevice geht, stürzt es ab.
Ich habe die NSRunLoop
Zeile auskommentiert, und das iDevice stürzt nicht ab. Es wird jedoch nicht mehr jede Sekunde aktualisiert.
Was mache ich hier falsch?
Dank
Was ist der Stack-Trace beim Absturz? Sie nennen auch 'FireOnload' mit' performSelector' - rufen Sie den Haupt-Thread oder Hintergrund an? – FluffulousChimp
Nun, das wird das eigentliche Problem nicht beheben, aber wenn Sie den Timer sofort auf den Runloop setzen wollen, können Sie auch planedTimerWithTimeInterval: verwenden und ihn nicht manuell auf den Runloop setzen. –