Plantage à la fermeture d'un document sur Snow Leopard
mpergand
Membre
Bonjour à tous,
Le problème semble venir de l'utilisation d'un KVO sur un élément de la ToolBar.
Le crash se produit à partir de 10.6 et pas sur 10.5.
Les logs parlent d'un problème KVO à la fermeture de la fenêtre:
- soit il me dit que le kvo n'a pas pu être enlevé car l'objet n'existe plus
- soit il me dit que je n'ai pas enlevé le kvo avant de fermer la fenêtre
Ma gestion de ce KVO est tout à fait classique:
à l'ouverture du document je fais:
et je l'enlève à la fermeture dans dealloc.
La raison du crash est très simple: la fenêtre du document est déjà désalouée !
La preuve, c'est que si je transfère le code du dealloc dans la méthode close du document, le crash ne se produit plus:
Alors la question que l'on peut se poser: est-il normal/logique que la fenêtre d'un document soit déjà désalouée à l'exécution du dealloc ( et non dans super dealloc) ou bien les programmeurs de chez Apple font-ils n'importe quoi ?
Le problème semble venir de l'utilisation d'un KVO sur un élément de la ToolBar.
Le crash se produit à partir de 10.6 et pas sur 10.5.
Les logs parlent d'un problème KVO à la fermeture de la fenêtre:
- soit il me dit que le kvo n'a pas pu être enlevé car l'objet n'existe plus
- soit il me dit que je n'ai pas enlevé le kvo avant de fermer la fenêtre
Ma gestion de ce KVO est tout à fait classique:
à l'ouverture du document je fais:
<br />
[color=#898989]// KVO[/color]<br />
NSToolbarItem* addrItem=[bar itemWithIdentifier:Toolbar_AddressBar visibleOnly:[color=#0033f5]NO[/color]];<br />
[addrItem addObserver:[color=#0033f5]self[/color] forKeyPath:[color=#990006]@"loading"[/color] options:NSKeyValueObservingOptionNew context:[color=#0033f5]nil[/color]];<br />
et je l'enlève à la fermeture dans dealloc.
La raison du crash est très simple: la fenêtre du document est déjà désalouée !
La preuve, c'est que si je transfère le code du dealloc dans la méthode close du document, le crash ne se produit plus:
<br />
- ([color=#0033f5]void[/color])close<br />
{<br />
[color=#898989]// si fait dans dealloc, plantage alléatoire lors de la fermeture des fenêtres[/color]<br />
[color=#898989]// les fenêtres semblent être désalouées !!![/color]<br />
[color=#898989]// KVO[/color]<br />
NSToolbarItem* addrItem=[[[oWebView window] toolbar] itemWithIdentifier:Toolbar_AddressBar visibleOnly:[color=#0033f5]NO[/color]];<br />
[addrItem removeObserver:[color=#0033f5]self[/color] forKeyPath:[color=#990006]@"loading"[/color]];<br />
...<br />
Alors la question que l'on peut se poser: est-il normal/logique que la fenêtre d'un document soit déjà désalouée à l'exécution du dealloc ( et non dans super dealloc) ou bien les programmeurs de chez Apple font-ils n'importe quoi ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ca me parait bizarre aussi mais bon ça pourrait expliquer un minimum, même si ça reste pas clean de la par d'Apple qd mm, même si c'est ça
Ok, mais dans mon cas il y a une seule fenêtre par document.
Et comment faire autrement, créer un WindowController spécialement pour ça ou intercepter la notification windowWillClose ?
C'est un peu tordu quand même ...
Mais surtout ce qui m'énerve, c'est que si ça marche avec 10.5, il n'y aucune raison pour que cela ne fonctione plus ensuite.
Et ça Apple s'en fou.
J'ai d'autres exemples d'applis qui fonctionnent très bien sur Tiger et Leopard et boum sur SL ça marche plus /angry.gif' class='bbc_emoticon' alt='>:(' />
Il me semble que NSDocument maintient déjà un NSWindowController pour charger le nib. Tu devrais donc pouvoir utiliser les méthodes -[NSDocument windowControllerDidLoadNib] et -[NSDocument shouldCloseWindowController...] dès à présent.
On peut aussi créer des WindowControllers spécifiques dans makeWindowControllers.
La vérité, c'est qu'Apple est bien moins regardante sur la compatibilité rétroactive de ses OS que Microsoft, avec elle c'est un peu marche ou crève ...