Xcode 2;0 bug mes nsevent mais pas Xcode 1.5
Genose
Membre
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.
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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 ?
http://lists.apple.com/archives/Cocoa-dev/2005/Feb/msg01690.html
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.
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 ?
Mais avant de te la présenter, il me faut savoir quelle touche cherches-tu à examiner au moment du départ du dragging...
.
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 :
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 :
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 :
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.
.
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.