AVAudioPlayer renvoie le point d'arrêt en mode debugging

Chaque fois que je charge l'application, elle s'arrête comme si j'avais défini un point d'arrêt sur cette ligne:

self.audioPlayer = [[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName] error:&outError] autorelease]; 

Il n'y a pas de point d'arrêt au-dessus ou n'importe quel endroit près de cette ligne. Cela ne se produit que lorsque je lance l'application en mode debugging et que rien ne se bloque après le point d'arrêt. L'application fonctionne comme rien ne s'est passé lorsque je clique sur "Continuer l'exécution du programme".

C'est la méthode loadData, appelée avec initWithData :

 -(NSData*)loadData:(NSSsortingng*)fileName { NSSsortingng *dataPath = [self.path ssortingngByAppendingPathComponent:fileName]; dataPath = [dataPath ssortingngByStandardizingPath]; NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ]; return data; } 

La fonction loadData semble fonctionner correctement. Le file mp3 demandé est chargé et joué sans aucun problème après le point d'arrêt.

Avez-vous une idée de ce que je fais mal?

EDIT: J'ai couru un backtrace quand il s'arrête au point d'arrêt. C'était la sortie:

 (lldb) bt
 * fil # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, arrêter la raison = point d'arrêt 1.2
     frame # 0: 0x30df1724 libc ++ abi.dylib`__cxa_throw
     frame # 1: 0x36403a24 AudioToolbox`ID3ParserHandle :: ID3ParserHandle (void *, long (*) (vide *, non signé long, non signé long, non signé long, vide **, non signé long *)) + 452
     image # 2: 0x36403b0e AudioToolbox`ID3ParserOpen + 142
     frame # 3: 0x3635bd16 AudioToolbox`MPEGAudioFile :: ParseID3Tags () + 58
     frame # 4: 0x3635b9aa AudioToolbox`MPEGAudioFile :: ParseAudioFile () + 26
     frame # 5: 0x3631723e AudioToolbox`AudioFileObject :: DoOpenWithCallbacks (void *, long (*) (vide *, long long, non signé long, vide *, long non signé *), long (*) (vide *, long long, non signé longtime , void const *, unsigned long *), long long (*) (vide *), long (*) (vide *, long long)) + 166
     image # 6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612
     frame # 7: 0x31f4c1ec AVFoundation`- [AVAudioPlayer initWithData: erreur:] + 120

"SOLUTION": Il s'avère que si je désactive le point d'arrêt d'exception pour toutes les exceptions et n'utilise le point d'arrêt que pour les exceptions Objective-C, le problème disparaît. Mais cela ne résout pas le problème que l'allocation de AVAudioPlayer renvoie une exception C ++.

Ajoutez votre point d'arrêt d'exception et modifiez le type d'exception de "Tous" à "Exceptions Objective-C"

Certaines classs d'AudioToolbox lèvent des exceptions C ++ régulières. Vous pouvez les filterr de cette façon.

AVAudioPlayer et AVAudioRecorder jetteront des exceptions, plusieurs d'entre eux. Ceux-ci sont gérés en interne par les joueurs, mais si vous avez un point d'arrêt pour "Tous les points d'arrêt" (c'est-à-dire Exception: All, Break: On Throw), vous pourrez attraper ces exceptions. Si vous continuez l'exécution sur ces derniers, l'application continuera à fonctionner normalement et ne pas planter du tout.

La seule solution que j'ai trouvée jusqu'ici est de cliquer sur la barre de point d'arrêt dans le Navigateur de point d'arrêt, en désactivant ce point d'arrêt particulier et en le désactivant.

Quand / si l'application se bloque avec une exception levée, je mdd-6, activez ce point d'arrêt, et relancez et faites ce que j'ai fait quand il s'est écrasé.

Edit: paramétrer sur "Objective-C exceptions" est évidemment comment le faire. Voir ci-dessus la réponse!

Voici une capture d'écran montrant comment j'ai corrigé cette erreur. Je ne suis pas sûr que ce soit la même chose que les réponses ci-dessus, mais je suppose que c'est similaire.

  1. Accédez au browser Breakpoint dans Xcode.
  2. Cliquez sur la ligne "Toutes les exceptions" en maintenant la touche Contrôle enfoncée.
  3. Sélectionnez l'option "Modifier le point d'arrêt …".
  4. Changer l' Exception de All à Objective-C .

entrez la description de l'image ici

Le backtrace a beaucoup aidé, merci! Nous avions commencé à rencontrer le même problème récemment. Il s'avère que les files mp3 sur lesquels il était lancé n'avaient pas de tag ID3 valide et les faire passer par une application telle que Tagr les a corrigés!

Essayez de définir AVAudioPlayer en tant que variable de class!