Итак, мне нужно запустить таймер в приложение метода делегат applicationDidEnterBackground:Нужна глобальная переменная NSTimer, или нечто подобное
- (void)applicationDidEnterBackground:(UIApplication *)application
{
globalBackgroundTimer = [NSTimer timerWithTimeInterval:30 invocation:nil repeats:NO];
}
таймер объявлен как и в приложении delegate.h:
extern NSTimer * globalBackgroundTimer;
В то время как таймер работает, я получаю обновления фонового местоположения (включен в plist), в контроллере представления, и я хочу постоянно проверять в locationManager: didUpdateLocations: Истек срок таймера, чтобы я мог завершить обновление местоположения ,
... //code omitted
//this is called repeatedly when the app is in the background, and checks whether the global variable is instantiated, and if it has expired.
if(globalBackgroundTimer)
{
NSLog(@"timer alive");
if(!globalBackgroundTimer.isValid)
{
[locationManager stopUpdatingLocation];
NSLog(@"background timer invalid, stopping location updates");
}
}
Но я не могу заставить его работать (ошибка Mach-O-линкер), однако я также читал, что этот подход был опрометчивым. Так что вы предлагаете?
Вы добавили 'NSTimer * globalBackgroundTimer;' к одному .m файл (за пределами любого класса), такие как приложение делегировать файл .m? – rmaddy
Это фактически сделало переменную работу, спасибо! Следующая проблема заключается в том, что по какой-то причине таймер не делает себя недействительным. Из того, что я могу прочитать, он должен признать себя недействительным, если repeat = NO. но код никогда не попадает в if (! globalBackgroundTImer.isValid) Редактировать --- Изменение его на запланированный таймер заставило его работать. :) Не могли бы вы объяснить, почему я должен добавить NSTimer * globalBackgroundTimer в файл .m? – Anders