Plantage sous Intel (pas PPC) (pas le meme que le précédent pos)
Bon alors voila j'essaye de porter mes applis sous Intel. Actuellement j'ai semble-t-il un problème d'affichage de la fenètre de préférence et c'est là qu'on positionne les entrées/sorties MIDI.
Si vous voulez tester c'est sur http://dqueffeulou.free.fr/beta/ (on va encore me taxer de double post...).
Voici les traces que j'ai récupéré de testeurs de MacMusic (ben oui c'est des applis pour les musiciens).
2007-07-12 23:09:09.082 ObieEditor[448] *** -[NSBundle load]: Error loading code /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle/Contents/MacOS/Smart Crash Reports for bundle /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle, error code 2 (link edit error code 0, error number 0 ())
2007-07-12 23:09:19.720 ObieEditor[448] *** Assertion failure in -[NSMenu itemAtIndex:], Menus.subproj/NSMenu.m:713
2007-07-12 23:09:19.806 ObieEditor[448] Invalid parameter not satisfying: (index >= 0) && (index < (_itemArray ? CFArrayGetCount((CFArrayRef)_itemArray) : 0))
Jul 12 23:10:22 Mon-Machin crashdump[452]: ObieEditor crashed
Jul 12 23:10:23 Mon-Machin crashdump[452]: crash report written to: /Users/mathiasroemer/Library/Logs/CrashReporter/ObieEditor.crash.log
2007-07-12 23:10:28.580 ObieEditor[454] *** -[NSBundle load]: Error loading code /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle/Contents/MacOS/Smart Crash Reports for bundle /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle, error code 2 (link edit error code 0, error number 0 ())
2007-07-12 23:10:42.842 ObieEditor[454] *** Assertion failure in -[NSMenu itemAtIndex:], Menus.subproj/NSMenu.m:713
2007-07-12 23:10:42.938 ObieEditor[454] Invalid parameter not satisfying: (index >= 0) && (index < (_itemArray ? CFArrayGetCount((CFArrayRef)_itemArray) : 0))
Cette trace à un rapport avec les menus mais je ne trouve nul part dans la doc Apple de différences Intel/PPC concernant les NIB ou les menus, donc je n'avance pas beaucoup.
Le problème d'ouverture des préférences est finalement le plus gros problème car le 2nd plantage est peut-etre une conséquence de l'état incertain des I/O MIDI (qui n'ont pas été configurés).
Sinon j'ai eu ca aussi :
Exception: EXC_ARITHMETIC (0x0003)
Codes: EXC_I386_DIV (divide by zero)
Thread 4 Crashed:
0 libgcc_s.1.dylib 0x90bd59b5 __udivdi3 + 321
1 com.apple.audio.midi.CoreMIDI 0x968126b1 SysexSender::RunTask(unsigned long long) + 581
2 com.apple.audio.midi.CoreMIDI 0x96811f64 Task::Run() + 90
3 com.apple.audio.midi.CoreMIDI 0x96811d1b XThread::RunHelper(void*) + 17
4 com.apple.audio.midi.CoreMIDI 0x96819617 CAPThread::Entry(CAPThread*) + 93
5 libSystem.B.dylib 0x90024227 _pthread_body + 84
Donc il semble que ce soit une division par 0.
J'ai étudié mon code et je ne vois pas d'endroit ou je fais des divisions. D'ailleurs le plantage à un rapport avec SysexSender qui est une méthode de l'API CoreMIDI (que je n'appelle pas, du moins pas directement).
J'ai aussi étudié mes modulos (%) et je n'utilise que des constantes.
Si quelqu'un a des idées je suis preneur
Merci.
Si vous voulez tester c'est sur http://dqueffeulou.free.fr/beta/ (on va encore me taxer de double post...).
Voici les traces que j'ai récupéré de testeurs de MacMusic (ben oui c'est des applis pour les musiciens).
2007-07-12 23:09:09.082 ObieEditor[448] *** -[NSBundle load]: Error loading code /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle/Contents/MacOS/Smart Crash Reports for bundle /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle, error code 2 (link edit error code 0, error number 0 ())
2007-07-12 23:09:19.720 ObieEditor[448] *** Assertion failure in -[NSMenu itemAtIndex:], Menus.subproj/NSMenu.m:713
2007-07-12 23:09:19.806 ObieEditor[448] Invalid parameter not satisfying: (index >= 0) && (index < (_itemArray ? CFArrayGetCount((CFArrayRef)_itemArray) : 0))
Jul 12 23:10:22 Mon-Machin crashdump[452]: ObieEditor crashed
Jul 12 23:10:23 Mon-Machin crashdump[452]: crash report written to: /Users/mathiasroemer/Library/Logs/CrashReporter/ObieEditor.crash.log
2007-07-12 23:10:28.580 ObieEditor[454] *** -[NSBundle load]: Error loading code /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle/Contents/MacOS/Smart Crash Reports for bundle /Users/mathiasroemer/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle, error code 2 (link edit error code 0, error number 0 ())
2007-07-12 23:10:42.842 ObieEditor[454] *** Assertion failure in -[NSMenu itemAtIndex:], Menus.subproj/NSMenu.m:713
2007-07-12 23:10:42.938 ObieEditor[454] Invalid parameter not satisfying: (index >= 0) && (index < (_itemArray ? CFArrayGetCount((CFArrayRef)_itemArray) : 0))
Cette trace à un rapport avec les menus mais je ne trouve nul part dans la doc Apple de différences Intel/PPC concernant les NIB ou les menus, donc je n'avance pas beaucoup.
Le problème d'ouverture des préférences est finalement le plus gros problème car le 2nd plantage est peut-etre une conséquence de l'état incertain des I/O MIDI (qui n'ont pas été configurés).
Sinon j'ai eu ca aussi :
Exception: EXC_ARITHMETIC (0x0003)
Codes: EXC_I386_DIV (divide by zero)
Thread 4 Crashed:
0 libgcc_s.1.dylib 0x90bd59b5 __udivdi3 + 321
1 com.apple.audio.midi.CoreMIDI 0x968126b1 SysexSender::RunTask(unsigned long long) + 581
2 com.apple.audio.midi.CoreMIDI 0x96811f64 Task::Run() + 90
3 com.apple.audio.midi.CoreMIDI 0x96811d1b XThread::RunHelper(void*) + 17
4 com.apple.audio.midi.CoreMIDI 0x96819617 CAPThread::Entry(CAPThread*) + 93
5 libSystem.B.dylib 0x90024227 _pthread_body + 84
Donc il semble que ce soit une division par 0.
J'ai étudié mon code et je ne vois pas d'endroit ou je fais des divisions. D'ailleurs le plantage à un rapport avec SysexSender qui est une méthode de l'API CoreMIDI (que je n'appelle pas, du moins pas directement).
J'ai aussi étudié mes modulos (%) et je n'utilise que des constantes.
Si quelqu'un a des idées je suis preneur
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne suis pas rancunier...
Sinon,
Une question : utilises-tu les bindings pour la gestion du pref panel ? (a priori non).
Une demande : poste le code que tu utilises pour remplir les 2 popupButton (input port et output port).
.
je me disais aussi avec un nombre de messages > 1500 :-)
Alors non les bindings en fait je ne sais pas vraiment ce que c'est, j'utilise des connections à partir de IB.
Sinon le code qui initialise les préférences:
En fait je suis en train de me dire que le problème vient peut-etre du selectItemAtIndex si le inputPortNumber vaut n'importe quoi au démarrage, ça risque de planter.
Est-ce que les int valent 0 par défaut ?
Il faudrait aussi que je m'assure qu'il y a au moins un item dans la liste...
int n'est pas un object. int est un numérique.
En tant que type basique (en C), int n'est pas initialisé lorsqu'il est déclaré : il a comme valeur ce qui se trouve en mémoire au moment où il son emplacement est créé.
Par contre, un int dans une interface de classe Obj-C vaudra toujours 0 (zéro) à la création de l'objet (car le runtime Obj-C met toute la structure de l'objet à 0 au moment du alloc).
.
En fait, tu effaces le contenu des popup (par un removeAllItems).
Ensuite tu remplis ce popup et tu sélectionnes un des items nouvellement ajoutés.
Mais, si la méthode de remplissage des items (ici midiInputs ou midiOutputs) ne renvoie rien (le tableau reste vide), tu tentes tout de même de sélectionner un item qui n'existe pas. Dans ce cas, NSMenu (celui attaché au popup) lève une exception (ce qui provoque le message dans la console), et stoppe le reste de l'exécution du code (donc pas d'affichage de fenêtre).
Donc, le problème pour les intel se situe au niveau de la classe MIDIDriver (dont nous ignorons le code), et plus particulièrement dans les méthodes midiInputs et midiOutputs qui ne renvoient pas le NSArray attendu sous intel.
Tu peux temporairement réparé ton code par un
afin de ne faire le selectItemAtIndex que si tu as bien remplis le popup.
.
En fait MIDIDriver est une de mes classes, j'ai vérifié, les méthodes créent systématiquement un tableau donc éventuellement vide. La modif permet de ne pas planter si le fichier de préférences contient des valeurs qui ne correspondent plus à la config MIDI actuelle.
J'ai initialisé mes ports à 0 dans l'init de MIDIDriver.
J'ai mis à jour le prog sur mon site.
Au fait Bru tu as un MacIntel ?
Oui, et un G5 aussi (voir ce fil pour l'histoire).
Maintenant, c'est OK (aussi bien sur le intel que sur le G5 qui plantait pour les mêmes raisons).
Juste pour le cosmétique : ajoute un setEnabled:NO au popup en plus du "no input".
.
Merci encore pour ton aide, j'essaierai de me limiter à un forum la prochaine fois (ce que je fais d'habitude).
Du coup je vais revoir mes autres applis qui doivent utiliser à peu près le même code...
mise à part MacMusic/440forums peut-être...
.
Je poste sur MacMusic mais en général sur des sujets liés directement à la musique. Pour tester l'appli je me suis dis qu'il y aurait plus de chance d'avoir des gens avec du MIDI. Ensuite pour les aspects code c'est plutot ici que je viens car le forum dev sur MacMusic n'est pas très actif et ne concerne pas vraiment la programmation pure.