2010-06-05 8 views
0

J'utilise un NSOutlineView avec la fonctionbug Cocoa NSOutlineView - [NSCFTimer copyWithZone]: sélecteur non reconnu envoyé à l'instance

- (BOOL)outlineView:(NSOutlineView *)outlineView 
    isGroupItem:(id)item 

définie de sorte qu'il donne l'apparence de l'interface graphique de la ligne du groupe. Lorsque j'ajoute un élément racine, cela fonctionne très bien. Lorsque j'ajoute un élément à la matrice enfant de root et que je l'étend, cela fonctionne très bien. Si je contracte l'article cependant, l'erreur suivante est enregistrée:

[NSCFTimer copyWithZone:]: unrecognized selector sent to instance 

Je reçois aussi une erreur de EXC_BAD_ACCESS si la fenêtre d'application est désactivée par changer d'application. J'ai utilisé le débogueur pour essayer de trouver où j'ai pu faire une erreur dans une de mes fonctions, mais la trace de pile montre seulement les fonctions que je n'ai pas créées (RunCurrentEventLoopInMode, CFRunLoopRunSpecific, handleWindowNeedsDisplay, etc.) Est-ce que quelqu'un a une idée de mon erreur? (s) pourrait être?

Répondre

4

Des sons comme un objet meurent prématurément. Vous obtenez l'exception "sélecteur non reconnu envoyé à l'instance" lorsqu'un nouvel objet est alloué plus tard avec le même pointeur et que quelque chose tente d'envoyer un message à l'ancien objet (dans l'exemple illustré, la réincarnation est un NSTimer et le message envoyer l'objet précédent était copyWithZone:). Vous obtenez un plantage EXC_BAD_ACCESS lorsque l'objet est simplement mémoire de déchets.

Déboguez-le en exécutant votre application sous Instruments avec l'instrument Zombies activé. L'objet va, au lieu de mourir, devenir un objet zombie. Quand quelque chose tente d'envoyer un message à un zombie, le zombie gémit (au sens figuré), qui apparaîtra dans la chronologie d'Instruments comme un drapeau. Vous pouvez cliquer sur un bouton dans cet indicateur pour afficher l'historique de l'objet, y compris toutes ses rétentions et versions.

Questions connexes