Iphone NSTimer Issue - PullRequest
       6

Iphone NSTimer Issue

0 голосов
/ 14 ноября 2009

Привет, я новичок в цели c. Я пытаюсь сделать приложение для iphone. У меня есть кнопка в моем представлении, и щелчок, по которому вызывается функция playSound. Это работает правильно. Он воспроизводит звук, который я хочу. Теперь проблема с таймером. Я хочу, чтобы таймер запускался при нажатии на ту же кнопку, и значение таймера будет отображаться в метке. Я еще не очень ясно с самим NSTimer. Я думаю, что я делаю что-то не так здесь. Кто-нибудь может мне с этим помочь.

-(IBAction)playSound { //:(int)reps

    NSString *path = [[NSBundle mainBundle] pathForResource:@"chicken" ofType:@"wav"];
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: path]; 
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
    theAudio.delegate = self;
    [theAudio play];

    [self startTimer];
}

- (void)startTimer {
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(targetMethod) userInfo:nil repeats:YES];
    labelA.text = [NSString stringWithFormat:@"%d", timer];
}

Используя приведенный выше код, когда я нажимаю на кнопку, воспроизводится звук, а затем мое приложение закрывается.

Спасибо Zeeshan

1 Ответ

2 голосов
/ 14 ноября 2009

Эта строка:

labelA.text = [NSString stringWithFormat:@"%d", timer];

не имеет абсолютно никакого смысла. Таймер вызовет метод, который вы укажете в качестве селектора в scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:, когда он сработает, поэтому вы должны реализовать этот метод и обновить свою метку там. Первая строка startTimer почти правильная, но селектор должен содержать двоеточие (потому что оно обозначает метод, который принимает один параметр):

- (void)startTimer {
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
}

Обратите внимание, что я назвал селектор timerFired:, поэтому мы должны реализовать этот метод. Если вы хотите, чтобы таймер увеличил счетчик, вам придется сделать это и в этом методе:

- (void)timerFired:(NSTimer *)timer {
    static int timerCounter = 0;
    timerCounter++;
    labelA.text = [NSString stringWithFormat:@"%d", timerCounter];
}

Не забудьте отключить таймер позже, когда он вам больше не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...