Я работаю над приложением iOS, которое предоставляет/делает вызовы из приложения. Мы можем совершать два звонка один за другим. Первый раз мы делаем первый звонок. Как только звонок будет установлен, NSTimer должен быть запущен, и на нем будет отображаться продолжительность вызова.Проблема при использовании 2 NSTimers
Для этого я делаю следующий для таймера
self.switchTimer1 = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(setTimerLabel1:)
userInfo:nil
repeats:YES];
[self.switchTimer1 fire];
после установления этого первого вызова, пользователь может сделать второй вызов.
Как только второй звонок будет установлен, он будет запускать второй таймер.
if (hasSecondCall)
{
self.switchTimer2 = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(setTimerLabel2:)
userInfo:nil
repeats:YES];
timeSec=0;
timeMin=0;
[self.switchTimer2 fire];
}
Он работает нормально, делая первый раз оба вызова.
Предположим, что если я закончил 2-й вызов и снова сделал звонок, то время 2-го таймера перед установкой вызова таймер автоматически вызывается и один раз устанавливается, значение увеличения таймера очень быстро, как показано двойным значением. Мол, 2,4, 6 и т.д.
Для secondtimer после метода обжига следующих
- (void)setTimerLabel2:(NSTimer *)timer {
timeSec=timeSec+1;
NSLog(@"timeSec+1 %d",timeSec+1);
if (timeSec == 60)
{
timeSec = 0;
timeMin=timeMin+1;
}
NSString* timeNow = [NSString stringWithFormat:@"%02d:%02d", timeMin, timeSec];
[_switchCallLCD setStatus:timeNow labelNumber:2];
}
Во время отсоединения вызова мы вызывая следующие
- (void)endingCallWithId:(UInt32)call_id {
if (hasSecondCall&& call_id==_current_call) {
if (self.switchTimer2) {
//NSLog(@"self.predictNumber %@",self.predictNumber);
self.predictNumber=self.predictNumber2;
[_lcd setText:self.predictNumber];
[self.switchTimer2 invalidate];
self.switchTimer2 = nil;
[self.switchTimer2 release];
[_switchCallLCD setStatus:NSLocalizedString(@"call ended",nil) labelNumber:2];
timeSec = 0;
timeMin = 0;
}
Я искал так много форумов по этому вопросу, но я не мог понять решение. Я слышал, если мы используем несколько таймеров, есть такая проблема.
@Anna спасибо за отредактированный мой вопрос –
Что такое переменные экземпляра '_current_call',' timeSec' и 'TimeMin'? Обычно мы используем свойства для ivars. Где называется 'endCallWithId'? Кажется, вы не используете ARC ('[self.switchTimer2 release]'), это не очень хорошая идея. – zaph
У моего приложения есть несколько файлов arc и некоторые из не-дуги, но этот файл не дуги // В заголовке я объявлял их, хотя я выпустил их в методе dealloc, ничего не меняется в статусе таймера int timeSec = 0; int timeMin = 0; –