2010-08-09 16 views
0

J'ai une erreur avec NSString. Dans un de mes fichiers .m j'ai un membre appelé "conversions" de type NSString et dans une méthode de cette classe la chaîne est manipulée et ajoutée à et bien Eh bien, quand j'essaye de Loger cette chaîne dans une méthode différente est appelé plus tard, pour une raison quelconque, la chaîne est imprimée en tant qu'objet UITouch. Plus précisément, je tente de me connecter la chaîne comme suitNSString et UITouch ... que se passe-t-il dans le monde?

NSLog(@"%@", conversions); 

et dans ma console elle imprime

<UITouch 0x131700> phase: Ended tap count: 1 window: <UIWindow: 0x136470; frame = (0 0: 320 480) opaque = NO.....(and more property type stuff) 

Pourquoi mon NSString transformé en ce qui ressemble à un objet UITouch? Que se passe-t-il?

+0

S'il vous plaît montrer la sortie en utilisant NSLog (@ "[% @]" conversions.); Il se peut que la sortie que vous voyez est le texte NSString – ennuikiller

+0

La sortie est la même sauf qu'il y a des parenthèses au début et à la fin: [UITouch 0x131700> phase ....] – CodeGuy

+0

vous avez un problème de sur-relâchement, comme la réponse ci-dessous indique ... La mémoire vers laquelle pointe NSString est récupérée et réutilisée (cette fois par un objet UITouch) – Daniel

Répondre

2

Une cause probable de ces problèmes est que les "conversions" ont été libérées trop tôt, elles se sont donc désallouées et vous mainteniez toujours une référence à cet emplacement de mémoire. Puis un autre objet a été affecté à cet endroit.

Pour déboguer cela, définissez NSZombieEnabled. Il ne libère pas les objets mais les remplace par des "zombies". Voir par exemple le lien suivant:

http://www.tomwhitson.co.uk/blog/2009/04/debugging-with-nszombiesenabled/

+0

Cela semble être le problème. Pourquoi aurait-il été publié trop tôt et comment puis-je empêcher cela? – CodeGuy

+0

Eh bien évidemment, vous avez appelé trop souvent [conversions] ou [conversions autorelease] ou vous avez appelé [conversions conserver] à peu de :-) Sans contexte, je ne peux pas dire. Mais jetez un oeil à ceci: http://blog.mikeweller.com/2009/07/retain-and-release-rules-in-objective-c.html – DarkDust

+0

Un autre bon lien est celui-ci ici sur Stack Overflow: http://stackoverflow.com/questions/6578/understanding-reference-counting-with-cocoa-objective-c – DarkDust