- (void) sendEvent: (UIEvent *) метод события iPhone 5.0 - PullRequest
1 голос
/ 21 февраля 2012

Я должен был определить, касался ли пользователь экрана iPhone.Итак, я создал класс с именем «CustomApplication» в своем проекте (подкласс UIApplication), а затем изменил свой main.m, чтобы он выглядел так:

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: событие).Когда я отладил код, я обнаружил, что проблема в [alertView show];линия.В iOS 5 происходит, когда эта конкретная строка ([alertView show];) выполняется, она снова вызывает метод sendEvent в CustomApplication, и этот метод вызывает showAlertWithTitle: метод MyUtility, который, в свою очередь, снова вызывает метод sendEvent и, следовательно, кодвходит в бесконечный цикл.Я не знаю решение.Если кто-то сталкивался с этой утомленной вещью, то, пожалуйста, скажите мне, что я должен написать, чтобы при получении оповещения метод sendEvent не вызывался?

1 Ответ

1 голос
/ 01 марта 2012

Это может показаться не лучшим подходом, но это может сработать.Вы пытались просто включить статическую логическую переменную в свой код, чтобы функция не вызывалась снова?

Где-то вверх

BOOL stopHere = NO;

А затем sendEvent

-(void)sendEvent:(UIEvent *)event{
    [super sendEvent:event];
    if (!skipHere){
        skipHere = YES;
        [MyUtility showAlertWithTitle:@"Alert!!!!" message:@"Session Expired!!!!"]; // show        
    skipHere=NO;
    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...