-[NSWindow lastObject]: selector not recognized

ClicCoolClicCool Membre
20:46 modifié dans Vos applications #1
Bonjour,

Mon soft plante épisodiquement (se bloque sans quitter) en me renvoyant le double message suivant:
2005-02-27 00:17:46.850 appliBuguee[879] *** -[NSWindow lastObject]: selector not recognized<br />2005-02-27 00:17:47.568 appliBuguee[879] *** -[NSWindow lastObject]: selector not recognized<br />


Pourtant:
- nulle part je n'utilise la méthode lastObject sur une fenêtre.
- Les seules fois où j'utilise lastObject c'est sur des NSArray tous simples qui n'ont rien à  voir avec l'interface graphique.
- quand j'utilise le debugger "pas à  pas" l'erreur est renvoyée en dehors de toute méthode perso.

Très exactement APRES exécution de la méthode standard des connections asynchrones:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

et avant toute autre méthode perso.
Plus précisemment là :
&lt;-[NSURLConnection(NSURLConnectionInternal) _sendCallbacks]+504&gt;<br />0x90a0c9dc&nbsp; &lt;+0488&gt;&nbsp; addis	r4,r31,4095<br />0x90a0c9e0&nbsp; &lt;+0492&gt;&nbsp; lwz	r4,25492(r4)<br />0x90a0c9e4&nbsp; &lt;+0496&gt;&nbsp; mr	r3,r27<br />==ICI CA PLANTE==&gt; 0x90a0c9e8&nbsp; &lt;+0500&gt;&nbsp; bl	0x90b16bbc &lt;dyld_stub_objc_msgSend&gt;<br />0x90a0c9ec&nbsp; &lt;+0504&gt;&nbsp; beq+	cr4,0x90a0caa4 &lt;-[NSURLConnection(NSURLConnectionInternal) _sendCallbacks]+688&gt;<br />


Le plus surprenant c'est que la seule circonstance clairement identifiée de ce bug est celle où l'URL cible de ma requete me renvoie, dans les data, un message de type
&lt;br /&gt;<br />&lt;b&gt;Warning&lt;/b&gt;:&nbsp; mysql_error(): supplied argument is not a valid MySQL-Link resource in &lt;b&gt;/Volumes/data.../...&lt;/b&gt; on line &lt;b&gt;39&lt;/b&gt;&lt;br /&gt;


C'est à  dire quand le serveur du site distant a planté ...

En plus de ça, j'ai beau éplucher les réponses et messages d'erreurs de ma requête ... Rien
Le NSData est valide et contient le message d'erreur MySQL du site distant que je pourrais tout à  fait traiter (comme les autres erreurs de connection) plus tard si l'appli m'en laissait le temps ...

Je vois pas le rapport avec " -[NSWindow lastObject]: " ???

Une piste ? SVP ? Pliz  :why?:

Réponses

  • fouffouf Membre
    20:46 modifié #2
    Est-ce que tu sais s'il s'agit d'une exeption?
    Tu peux peut-être comparer l'adresse de ta fenetre principale et de celle qui envoie le message lastobject. Personellement, ca m'etonnerait que cela soit la même. Par contre, je ne vois pas le lien entre la fenêtre et la connection.

    Bon courage ClicCool :p   :(renaud):
  • ClicCoolClicCool Membre
    20:46 modifié #3
    dans 1109501406:

    Est-ce que tu sais s'il s'agit d'une exeption?

    Ben non je sais pas, je sais même pas si je peux savoir  ???  :-\\
    dans 1109501406:

    Tu peux peut-être comparer l'adresse de ta fenetre principale et de celle qui envoie le message lastobject.

    Je la trouve où l'adresse de la fenêtre renvoyant cette erreur ?

    :why?:
  • fouffouf Membre
    20:46 modifié #4
    Soit par un [window description] soit par une commande C du genre int adr = (int)window; (là  je suis pas sûr, j'invente).

    Pour recuperer les exeptions, tu ouvres la fenêtre Breakpoints de XCode et tu en rajoute un que tu nommes [NSExeption raise]. Comme ca, tu pourras voir toutes les exeptions qui sont levées.
  • ClicCoolClicCool Membre
    20:46 modifié #5
    le pb c'est que la fenêtre (si s'en est bien une) renvoie l'erreur quand ça a planté et depuis une zone hors de mon code propre et je vois mal comment engager le conversation avec elle :(

    Merci pour le break point: "[NSExeption raise]" je l'ai mis en place pour l'avenir ...

    Mais je peux attendre plusieurs jours avant que ça ne survienne .... et encore! jusque là  c'est le matin que je me rend compte qu'il a planté dans la nuit et quand je relance l'appli tout roule ...

    C'est le pb avec ces bugs non reproductibles ou alors reproductible (dans ce cas précis) en plantant le site ciblé !

    A moins que je demande à  l'admin du site ciblé par ma requète de planter son serveur juste pour mes test ? Mais ça m'étonnerai qu'il soit d'accord.
    Quoi qu'il drôlement chouette cet admin ;)
  • ClicCoolClicCool Membre
    20:46 modifié #6
    Bon y'a du nouveau.

    Le gentil Admin du site ciblé a planté quelques temps pour moi la principale page cible de mes requêtes. [size=12pt]Merci Ami[/size]  :p

    Et comme je m'y attendais mon appli plante chaque fois en fin de requête avec les même 2 lignes d'erreur:
    2005-02-27 18:14:08.847 appliBuguee[1086] *** -[NSWindow lastObject]: selector not recognized<br />2005-02-27 18:14:08.862 appliBuguee[1086] *** -[NSWindow lastObject]: selector not recognized
    


    Mais j'ai beau faire ça plante Toujours, que je lise la réponse, l'intercepte et la filtre et même si je ne fais STRICTEMENT RIEN dans la méthode:
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {<br />// ne fais RIEN<br />}
    


    ça plante en sortant de cette méthode quelque parts dans les limbes.

    Quelqu'un saurait-il s'il y a un bug connu dans la classe NSURLConnection ?
    J'ai vraiment l'impression que c'est là  qu'est le pb  :'(

    Mais quel rapport avec " -[NSWindow lastObject]: " ?


    ??? Comment puis-je contourner ça ???
    :why?:  :why?:  :why?:  :why?:
  • muqaddarmuqaddar Administrateur
    20:46 modifié #7
    Peut-être utiliser :
    connection:didFailWithError:
    ou
    connection:didReceiveResponse:

    avant ta méthode à  toi.
  • ClicCoolClicCool Membre
    20:46 modifié #8
    dans 1109527019:

    Peut-être utiliser :
    connection:didFailWithError:
    ou
    connection:didReceiveResponse:

    avant ta méthode à  toi.


    J'ai en effet torturé ma NSURLConnection et disséqué ses méthodes sans résultat :(
  • ClicCoolClicCool Membre
    20:46 modifié #9
    :brule: [size=16pt]Probleme résolu[/size]  :brule:

    Comme d'habitude c'était une çonnerie (je met la cédille pour être plus musical et poli)

    En fait c'était (bien sur) mon code, mais comment se fait-il que j'ai pas pu localisé le pb plus rapidement ?  :-\\
    Faut dire que le message semblant incriminer une NSWindow m'a envoyé dans de mauvaises directions  >:(
    Merci fouf pour le coup du point d'arrêt sur exception 

    Un bête NSMutableArray devant recevoir des NSTextTabStop n'était pas initialisé en cas de réponse mal formatée (ou plutot formatée différemment qu'attendu)
    Et, évidemment je demandais sur ce tableau non initialisé le lastObject.

    Mais la question demeure du pourquoi ce message d'erreur [NSWidow lastObject] selector not recognize ? 

    Merci à  tous
    :fouf): <3 :p <3 :fouf):
  • fouffouf Membre
    février 2005 modifié #10
    dans 1109528214:

    :brule: [size=16pt]Probleme résolu[/size]  :brule:


    Ah bah, c'est une bonne nouvelle.
    dans 1109528214:

    Merci fouf pour le coup du point d'arrêt sur exception 


    De rien. C'est un binz a mettre dans TrukEAstuce.
    dans 1109528214:

    Mais la question demeure du pourquoi ce message d'erreur [NSWidow lastObject] selector not recognize ? 

    Il s'agit peut-etre d'une erreur dans le debuggeur.
    Qui a une idée ?
  • BruBru Membre
    20:46 modifié #11
    dans 1109498295:

    Je vois pas le rapport avec " -[NSWindow lastObject]: " ???


    Erreur typique de débutant (oui, ClicCool, tu resteras éternellement jeune...)

    Il s'agit bien sûr de l'envoi d'un message à  un objet qui n'est plus en mémoire (dans 80 % des cas, il s'agit d'un objet autoreleasable dont on a oublié le retain...)

    Lorsque l'objet est purgé, son bloc d'allocation est généralement réutilisé par un autre objet, d'où la confusion du runtime lorsque on tente d'utiliser cet objet qui est en fait devenu un autre !

    .
  • ClicCoolClicCool Membre
    20:46 modifié #12
    dans 1109539906:

    oui, ClicCool, tu resteras éternellement jeune...


    Merci Bru, pourvue que ça dure (ma jeunesse, mon inocence et ma naà¯veté)  ;)

    Ceci dit quelle coincidence quand même qu'un pointeur d'objet (NSArray) non alloué et non initialisé, coà¯ncide pil poil avec l'adresse d'un autre Objet (ici une NSWindow) et en plus toujours le même objet ???

    P.S.: ça a été la pêche aujourd'hui ? ça a mordu ? t'as pris quoi ?  ;D
Connectez-vous ou Inscrivez-vous pour répondre.