Я работаю над приложением iOS (FW: 5.0+ & ARC), который необходимо обновлять второй раз.NSRunLoop работает нормально на Simulator, Crashes iDevice
В настоящее время у меня есть это в методе (который вызывается в performSelector, когда -ViewDidLoad):
-(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
}
}
переменная counter
вызывается в заголовке как NSTimer. Я явно вызываю [counter fire]
, поэтому он вызывается, как только изображение загружается, а не через 1 секунду.
Это прекрасно работает в iOS Simulator и будет срабатывать каждую секунду, но когда он отправится в iDevice, он сработает.
Я прокомментировал строку NSRunLoop
, и iDevice не сбой. Однако он не обновляется каждую секунду.
Что я здесь делаю неправильно?
Благодаря
Что такое трассировка стека при сбое? Кроме того, вы упоминаете, что вы вызываете «FireOnload» с помощью 'performSelector' - вы вызываете основной поток или фон? – FluffulousChimp
Ну, это не решит проблему, но если вы сразу же поместите таймер на runloop, вы также можете использовать schedTimerWithTimeInterval: и не ставьте его на runloop вручную. –