Проблема с таймером, устройством и симулятором - PullRequest
0 голосов
/ 02 сентября 2010

HI Frends есть проблема, связанная с предупреждением и таймером. Проблема:

timer1 = [NSTimer scheduledTimerWithTimeInterval:1.0/30 target:self
     selector:@selector(Loop1) userInfo:nil repeats:YES];

timer2 = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self
     selector:@selector(timrClock) userInfo:nil repeats:YES];

-(void) timrClock
{

long diff = -((long)[self.now timeIntervalSinceNow]);
timrLabel.text = [NSString stringWithFormat:@"%02d:%02d",(diff/60)%60,diff%60];

if(diff >= timeBankCounter)
{
    if(clockTimer != nil)
    {
        [clockTimer invalidate];
        clockTimer = nil;
    }
    targetButton.userInteractionEnabled = NO;
    NSLog(@"RESTART");
    NSLog(@"chance:- %d",[[self appDelegate].chance intValue]);
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Time Out!" message:@"Your time is over." delegate:self cancelButtonTitle:@"Try Again." otherButtonTitles:@"Quit"];
    [alert show];
    [alert release];
    //[timer invalidate];
}
}

на симуляторе все идет хорошо, но на устройстве предупреждение не отображается и приложение завершается. На консоли появляется сообщение "EXC_BAD_ACCESS" после указанного выше NSLog (@ "chance ---").

1 Ответ

1 голос
/ 03 сентября 2010

Это может быть не единственной ошибкой, но список другихButtonTitles ДОЛЖЕН заканчиваться на nil, например:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Time Out!" message:@"Your time is over." delegate:self cancelButtonTitle:@"Try Again." otherButtonTitles:@"Quit", nil];

Это потому, что принимает неопределенное количество аргументов и в истинном C-стиле получатель неявно знает длину, поэтому он продолжает пытаться интерпретировать соседние данные как строковые указатели, пока не найдет значение 0.(Это не обязательно для чего-то вроде +stringWithFormat: метода NSString, где он знает, сколько дополнительных аргументов ожидать, сколько спецификаторов формата появятся в строке формата.) Это действительно прискорбное совпадение, что он не дает сбоя и в симуляторе.

...