2010-08-14 6 views
0

J'ajoute un NSTimer dans l'application iphone. Quand j'exécute l'application, c'est raté. Je l'ai suivi et ai trouvé qu'il s'arrêtent à "0x3050c3ad < +0013> appellent 0x306aeaa5" et ne peuvent pas . continuer débogueurL'erreur de NSTimer

Si vous le savez, s'il vous plaît me dire ce qui ne va pas avec l'application et la façon de le résoudre

Merci

le code est:.!

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

Je ne pense pas que quiconque va être en mesure de vous aider en fonction de cette seule information (étant donné que nous ne savons pas ce '0x306aeaa5' est). Pouvez-vous poster votre code et nous dire quel est le problème exact? . –

+0

I a posté un code – lqf

Répondre

1

lqf,

Vous devez d'abord accéder au temporisateur via self.m_heartBeatTimer puisque vous l'avez déclaré comme étant conservé dans la déclaration @property. Si vous n'utilisez pas le préfixe self., vous n'utilisez pas le setter et par conséquent vous ne retenez pas le minuteur comme vous l'avez spécifié dans la déclaration @property.

Je n'ai aucune idée de ce que votre message d'erreur obscur est, mais je suppose que c'est lié à la mémoire. Assurez-vous d'utiliser ce préfixe self. et faites-moi savoir si cela fonctionne. Si vous avez effectivement un message d'erreur de sortie EXC_BAD_ACCESS sur la console d'exécution, veuillez mettre à jour votre message pour que les gens puissent travailler avec.

-Rob

+0

Rob, le problème est que je fais « [m_heartBeatTimer invalident]; ». Deux fois L'un est "si (m_heartBeatTimer = nul!) [M_heartBeatTimer invalident];", autre « [m_heartBeatTimer invalident ] " à l'avant. J'ai changé "[m_heartBeatTimer invalidate];" à "[m_heartBeatTimer invalidate]; m_heartBeatTimer = nil" et c'est ok. Merci pour la même chose! Pourriez-vous me dire comment fermer les questions? – lqf

+0

lqf, vous devez toujours utiliser le préfixe 'self.' pour que le setter soit appelé et que le temporisateur soit conservé. Sinon, il sera créé comme autorelease, ce qui va à l'encontre du but de votre déclaration en tant que propriété conservée dans la déclaration d'origine. – iwasrobbed