これを修正する方法は、最初に 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 コントローラは、通常の setIdleTimerDisabled メソッドが呼び出されたときに何もしないカスタム UIApplication インスタンスを使用するようになります。