Способ исправить это - сначала создать подкласс UIApplication, переопределить метод setIdleTimerDisabled и заставить его ничего не делать. Затем добавьте пару своих собственных методов, которые вы будете вызывать из своего приложения, вместо использования обычного установщика. Делая это, вы будете игнорировать все сообщения, которые могут изменить таймер простоя, кроме пользовательских вызовов методов, которые вы делаете сами. Вот как вы это делаете:
Отредактируйте файл main.m для использования пользовательского подкласса UIApplication:
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString* appClass = @"CustomUIApplicationSubclass";
NSString* delegateClass = nil;
int retVal = UIApplicationMain(argc, argv, appClass, delegateClass);
[pool release];
return retVal;
}
Затем определите свой подкласс UIApplication:
@interface CustomUIApplicationSubclass : UIApplication {
}
- (void)disableIdleTimer;
- (void)enableIdleTimer;
@end
@implementation CustomUIApplicationSubclass
- (void)setIdleTimerDisabled:(BOOL)disabled
{
// do nothing! take that stupid ipod controller!
}
- (void)enableIdleTimer
{
[super setIdleTimerDisabled:NO];
}
- (void)disableIdleTimer
{
[super setIdleTimerDisabled:YES];
}
@end
Это заставит контроллер iPod использовать ваш пользовательский экземпляр UIApplication, который больше ничего не делает, когда вызывается обычный метод setIdleTimerDisabled.