Xcode 2;0 bug mes nsevent mais pas Xcode 1.5

GenoseGenose Membre
07:01 modifié dans Xcode et Developer Tools #1
bonjour,

je souhaiterais avoir vos lumiere aprés avoir découvert que xcode 2.0 me compile un binaire qui ne fonctionne plus comme attendu, alors que ce mem code fonctionne parfaitemebnt apres recompilation dans xcode 1.5, j'utiise deux mac different avec les specification requise a chaqun des xCode.

voici le code incriminer

dans mousedragged:(nseevent*)event
{


NSEvent *keyEvnt = [ NSApp nextEventMatchingMask:NSAlternateKeyMask|NSCommandKeyMask untilDate:[NSDate distantFuture]  inMode:NSDefaultRunLoopMode dequeue:NO];
//[NSApp currentEvent];

/* if ([event keyCode])
NSLog(@\n\n>>>>>>>> mouse event with key %ld,[event keyCode]);
*/

//
NSLog(@\;n\n>>>>>>>> mouse tracking dragged  NSview tool %@\;n\n>>>>>>>>>>>>>>>>",keyEvnt);
if([keyEvnt keyCode]==16256){
//
NSLog(@\;n\n>>>>>>>> mouse event dragged  NSview tool %@\;n\n>>>>>>>>>>>>>>>>",keyEvnt);
}


}


avec xcode 2.0 le binaire obtenu me renvoie :

2006-03-16 18:18:24.113 projet[4439] *** Assertion failure in -[NSEvent keyCode], AppKit.subproj/NSEvent.m:1100
2006-03-16 18:18:24.114 projet[4439] Invalid message sent to event "NSEvent: type=LMouseDragged loc=(664,214) time=38133.6 flags=0x100 win=0 winNum=1517 ctxt=0xd2ef evNum=614 click=1 buttonNumber=0 pressure=1 deltaX=1.000000 deltaY=0.000000"
2006-03-16 18:18:24.506 projet[4439]

>>>>>>>> mouse tracking dragged  NSview tool NSEvent: type=SysDefined loc=(109,694) time=38133.9 flags=0x100 win=0 winNum=0 ctxt=0xd2ef subtype=7 data1=1 data2=0

>>>>>>>>>>>>>>>>
2006-03-16 18:18:24

dans xcode 1.5 :

rien ..., l'appli fonctionne à  merveille et pourtant xCode 2 m'as fait corriger de nombreuses choses.


le projet est compiler en SDK 10.2.8 (en attendant des classes spécialiser pour chaque grade du systeme)

avez vous deja eu des "truc" de  ce genre ou alors avez vous une solution, svp.

merci.

Réponses

  • GenoseGenose Membre
    07:01 modifié #2
    Xcode 2.2.1 et compilation SDK 10.4 donne pareil, une erreur.
    j'avance dans les mises a jours de MacOS et je recule dans mon projet  :'(

    j'ai beau parader ce bug je ne trouve rien, à  part continuer avec GCC3.3, xcode2.2 est tellement different du 1.5 que ne trouve meme pas l'option pour dire quelle versin de gcc utiliser.

    c'est le seul endroit de mon code qu me fait cettre erreur par rapport a keycode.
    J'ai une deuxieme fenetre qui elle est un document; capte tres bien ces events clavier avec flagsChanged (commeelle n'est pas toujours presente je ne peut pas l'utiliser et là à  ca devient tres vite du bricolage  à  deux sous) , meme pendant le drag de ma view contenant le code litigieux. Mais qu'es ce qui cause cette erreur d'insertion, pour la methode keycode?

    :'( qui veut bien m'aider ? :'(
  • mpergandmpergand Membre
    07:01 modifié #3
  • GenoseGenose Membre
    07:01 modifié #4
    Apple, Pourquoiiiii  :'( , pourquoi obliger tes admirateurs a se decompiler en x3 pour toi et se recompiler en x4 toujours pour toi, tu es injuste !

    tant pis je trouverais une parade a ton vil caprice, mais certainement pas mettre pleins de "if(keydown) machinchose".

    ce qui est est un peu fort c'est qu'il est totalement effacer Keycode dans la plupart des cas pour 10.4
    merci mpergand.
  • GenoseGenose Membre
    07:01 modifié #5
    JE vois que un seul moyen de regler la question:

    parvenir a effacer les options framework = ( ! 10.4 )

    mais une chose m'echape, j'ai remplacer les Path dans Target (header, libraries et framewoks) par sdk10.2, compilers setting par 10.2, et changer les frameworks du listing de fichier par ceux du SDk10.2( mon projet doit fonctionner sur un max de Mac hors intel, gna gnak), mais ils s'entete à  contunuer à  me mettre un binaire pure 10.4.

    quelqu'un connait'il la manoeuvre à  suivre pour faire du vrai "cross-target platform" car là  je reste en "half cross ..." et les fontionnalités en patisse dans mon projet (plus de drag de de palette aimanter ou de drag de d'autre element dependant de cette condition clavier)

    ou alors de continuer a tout compiler sur 10.3, mais c'est lent (iMac G3) et oublier mon G4 pour ce truc la.

    une idée ?
  • BruBru Membre
    07:01 modifié #6
    Il y a une solution simple...

    Mais avant de te la présenter, il me faut savoir quelle touche cherches-tu à  examiner au moment du départ du dragging...

    .
  • GenoseGenose Membre
    07:01 modifié #7
    Salut Bru, Qu'as tu à  me proposer ?

    Les touches dont j'ai besoin dans MouseDrag (et peut etre meme ailleurs si ca continue) sont essentiellement le Command, Alt, Ctrl, Maj; enfin toutes les touches fonctions  qui passe par flagChanged ou dumoins qui ne sont pas de caractere.

    Merci de ton aide.
  • BruBru Membre
    07:01 modifié #8
    dans 1142774586:

    Salut Bru, Qu'as tu à  me proposer ?

    Les touches dont j'ai besoin dans MouseDrag (et peut etre meme ailleurs si ca continue) sont essentiellement le Command, Alt, Ctrl, Maj; enfin toutes les touches fonctions  qui passe par flagChanged ou dumoins qui ne sont pas de caractere.

    Merci de ton aide.


    Là , je suis très en colère !

    Ca me bouffe de voir les gens donner leur bout de code tapé avec les pieds en disant "ça ne marche pas", sans :
    1. expliquer la finalité de ce qu'ils veulent faire...
    2. sans lire la doc cocoa...

    Quand je lis la doc cocoa sur NSEvent, c'est clair :
    Getting key event information
    - characters
    - charactersIgnoringModifiers
    - isARepeat
    - keyCode

    la méthode keyCode fait partie des méthodes liées aux événement clavier. Que cela marche avant pour les autres types d'événement comme ceux de la souris (peut être à  cause d'un bug résolu depuis dans 10.4) et plus maintenant, n'est pas surprenant. Si le codeur ne respecte pas la doc, il ne doit pas être supris de l'instabilité de son code de version en version de l'OS.

    Maintenant, toujours dans cette doc :
    Getting general event information
    - context
    - locationInWindow
    - modifierFlags
    - timestamp
    - type
    - window
    - windowNumber

    les anglophobes peuvent râler, mais il ne faut pas sortir de Saint-Cyr pour comprendre que la méthode modifierFlags faisant partie des méthodes générales liées à  tout type d'événement font penser à  "touches modificatrices", donc l'état des touches SHFIT, ALT, CTRL ou POMME.

    De plus, en lisant les guidelines d'Apple, cette technique est clairement expliquée.

    Ton code peut être recoder comme suit :
    <br />- (void)mouseDragged:(NSEvent *)theEvent<br />{<br />	unsigned int modifierKeys;<br /><br />	modifierKeys=[theEvent modifierFlags];<br /><br />	if (modifierKeys &amp; NSShiftKeyMask) NSLog(@&quot;Touche SHIFT pressée&quot;);<br />	if (modifierKeys &amp; NSControlKeyMask) NSLog(@&quot;Touche CTRL pressée&quot;);<br />	if (modifierKeys &amp; NSAlternateKeyMask) NSLog(@&quot;Touche ALT pressée&quot;);<br />	if (modifierKeys &amp; NSCommandKeyMask) NSLog(@&quot;Touche POMME pressée&quot;);<br />}<br />
    


    En conclusion :
    1. lis la doc de modifierFlags ici.
    2. un complément sur ce que modifierFlags peut détecter ici.
    3. pas besoin de rétrograder ton code avec de vieilles versions de l'AppKit pour qu'un "truc" fonctionne, alors que tu t'exposes à  bien d'autres "trucs" ne fonctionnant plus. Faire ça, c'est vraiment la dernière chose à  faire.


    PS : ne t'offusque pas de ma "colère" Genose. Je n'ai rien contre toi. J'ai juste un peu bu, et donc j'ai le verbe facile.

    .
  • GenoseGenose Membre
    07:01 modifié #9
    mouooff tu sais, avec les pieds, je tape aussi bien ;)

    j'ai comparer les ententes et version de doc sur NSEvent et NsResponder et NSApplication, mais je n'ai pas trouver la bonne solution que je cherchais.

    merci celle ci, Bru.

Connectez-vous ou Inscrivez-vous pour répondre.