2010-11-04 7 views
0

Je suis confronté à un problème un peu étrange avec la mise en œuvre d'UIAccelerometer. J'ai un UITableViewController où je ne veux pas utiliser UIAccelerometer, mais après avoir appuyé sur les lignes que je veux activer dans un UIViewController, tout va bien quand j'utilise le simulateur, mais quand j'utilise l'iPhone 3G pour le tester, j'ai EXC_BAD_ACCESS en appuyant sur le bouton de retour. Cela fonctionne très bien quand je désactive la [version de percView]; mais cela ne semble pas être une solution pour. Toute idée serait appréciée.UIAccelerometer EXC_BAD_ACCESS crash sur le périphérique

Secouer la mise en œuvre de contrôle:

 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0/kUpdateFrequency]; 
    [[UIAccelerometer sharedAccelerometer] setDelegate:self]; 

} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 

    [[UIAccelerometer sharedAccelerometer] setDelegate:nil]; 
} 

Thx

Répondre

1

La méthode viewDidUnload est appelée uniquement dans des cas spécifiques, tels que l'avertissement de la mémoire. Vous devez également supprimer le délégué au dealloc.

+0

Vous avez raison ... cela fonctionne très bien – Vanya

0

Essayez de le relâcher après vous rejetez, je ne suis pas sûr si pushViewController conserve.

+0

FWIW: pushViewController ajoute –

+0

Il est certainement dit que c'est le cas, mais peut-être que sur le périphérique dans ce cas, il n'envoie le message de conservation qu'après l'envoi du message de libération. Cela ne devrait pas fonctionner de cette façon bien sûr. – Ben

0

Vous pouvez définir les variables d'environnement NSZombiesEnabled & NSAutoreleaseFreedObjectCheckEnabled avec une valeur de 1. Cela permettra d'éviter les objets de vraiment être désallouée, alors vous devriez obtenir les journaux de la console indiquant où le cours de libération vient. Vous pouvez utiliser Exécuter avec les outils de performance -> Allocations une fois que vous savez quel objet est en cours de relâchement et voir chaque emplacement où une retenue/libération a été appelée pour identifier le déséquilibre.

Questions connexes