2012-02-21 4 views
1

ユーザーがiPhone画面に触れたかどうかを検出しなければなりませんでした。だから、私は(のUIApplicationのサブクラス)私のプロジェクトで「CustomApplication」という名前のクラスを作成してから、私はこのように見えるために私main.mを変更し、次のよう- (void)sendEvent:(UIEvent *)イベントメソッドiPhone 5.0

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, @"CustomApplication",nil); 
[pool release]; 
return retVal; 

このクラス「CustomApplication.mは、」メソッドが含まれています:

- (void)sendEvent:(UIEvent *)event { 
[super sendEvent:event]; 
[MyUtility showAlertWithTitle:@"Alert!!!!" message:@"Session Expired!!!!"]; // showing an alert here 
} 

方法showAlertWithTitleは次のようになります。

+ (void) showAlertWithTitle:(NSString *)aTitle message:(NSString *)aMessage 
{ 
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:aTitle message:aMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alertView show]; // Line causing problem in iOS 5 - base sdk 5.0 
[alertView release]; 

}

iOS 4.2ではうまくいきましたが、iOS 5.0では画面に触れてアプリがクラッシュしています(sendEvent:eventメソッドが呼び出されたとき)。コードをデバッグすると、問題が[alertView show]にあることがわかりました。ライン。 iOS 5では、この特定の行([alertView show];)が実行され、CustomApplicationのsendEventメソッドが再度呼び出され、このメソッドはMyUtilityのshowAlertWithTitle:メソッドを呼び出し、これが次にsendEventメソッドを呼び出し、コード無限ループに入っています。私は解決策を知らない。誰かがこのような凶悪なことに直面した場合は、どうすれば警告が表示されているかをsendEventメソッドが呼び出されないように記述してください。

+1

あなたは '[alertViewショー]スタックトレースを含めることができます;'のSendEventを呼んでいますか? – picciano

答えて

1

これは最善のアプローチとは思えないかもしれませんが、うまくいく可能性があります。単純に静的なブール変数をコードに含めてみましたが、関数が再び呼び出されないようにしましたか?

どこまで

BOOL stopHere = NO; 

そしてのSendEvent

-(void)sendEvent:(UIEvent *)event{ 
    [super sendEvent:event]; 
    if (!skipHere){ 
     skipHere = YES; 
     [MyUtility showAlertWithTitle:@"Alert!!!!" message:@"Session Expired!!!!"]; // show   
    skipHere=NO; 
    } 
    } 
関連する問題