2010-08-14 2 views
0

Я добавляю NSTimer в приложение iphone. Когда я запускаю приложение, он не работает. Я отслеживал его и обнаружил, что он останавливается на «0x3050c3ad < +0013> call 0x306aeaa5» и cann't . продолжай в отладчикеОшибка NSTimer

Если вы знаете, скажите, пожалуйста, что случилось с приложением и как ее решить

Спасибо

код:.!

NSTimer *m_heartBeatTimer; 

@property(nonatomic, retain) NSTimer *m_heartBeatTimer; 

@synthesize m_heartBeatTimer; 


-(void)HeartBeatTimer:(NSTimer *)timer 
{ 

    [csocket CloseSocket]; 

} 

case PING: 
     { 
      [self SendDataToServer:"00" Type:PONG]; 

      if(m_heartBeatTimer != nil) 
       [m_heartBeatTimer invalidate]; 
      m_heartBeatTimer = [NSTimer scheduledTimerWithTimeInterval:6.0 target:self selector:@selector(HeartBeatTimer:) userInfo:nil 
                   repeats:NO]; 


     } break; 
+2

Я не думаю, что кто-то будет в состоянии помочь вам, основываясь только на этой информации (учитывая, что мы не знаем, что '0x306aeaa5' есть). Можете ли вы опубликовать свой код и рассказать нам, какая именно проблема? . –

+0

я разместил код – lqf

ответ

1

lqf,

Сначала вы должны получить доступ к таймеру через self.m_heartBeatTimer, так как вы заявили его как сохраненный в объявлении @property. Если вы не используете префикс self., вы не используете установщик, и поэтому вы не сохраняете таймер, как указано в объявлении @property.

Я понятия не имею, что это за сообщение об ошибке, но я предполагаю, что это связано с памятью. Убедитесь, что вы используете префикс self. и дайте мне знать, если это сработает. Если у вас на экране появилось сообщение об ошибке EXC_BAD_ACCESS в консоли запуска, пожалуйста, обновите свой пост, чтобы с ним могли работать люди.

Роб

+0

Роб, проблема заключается в том, что я «[m_heartBeatTimer аннулированию];». Дважды Один "если (m_heartBeatTimer = ноль!) [M_heartBeatTimer недействительным];", другой «[m_heartBeatTimer аннулированию ];» спереди. Я изменил «[m_heartBeatTimer invalidate];» to "[m_heartBeatTimer invalidate]; m_heartBeatTimer = nil", и все в порядке. Спасибо за то же! Не могли бы вы рассказать мне, как закрыть вопросы? – lqf

+0

lqf, вы все равно должны использовать префикс 'self.', чтобы вызывающий вызов вызывался и таймер сохранялся. В противном случае он будет создан как автореклама, которая побеждает цель объявить ее как сохраненное свойство в первоначальной декларации. – iwasrobbed