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 à tout endroit près de cette ligne. Cela ne se produit que lorsque j'exécute l'application en mode débogage et que rien ne se bloque après le point d'arrêt. L'application fonctionne car rien ne s'est passé lorsque je clique sur "Continuer l'exécution du programme".
Il s'agit de la méthode loadData, qui est appelée avec initWithData
:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
La fonction loadData semble fonctionner correctement. Le fichier mp3 demandé est chargé et lu 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 exécuté une trace arrière quand il s'arrête au point d'arrêt. C'était le résultat:
(lldb) bt * thread # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, raison de l'arrêt = point d'arrêt 1.2 cadre n ° 0: 0x30df1724 libc ++ abi.dylib`__cxa_throw frame # 1: 0x36403a24 AudioToolbox`ID3ParserHandle :: ID3ParserHandle (void *, long (*) (void *, unsigned long, unsigned long, unsigned long, void **, unsigned long *)) + 452 cadre n ° 2: 0x36403b0e AudioToolbox`ID3ParserOpen + 142 image n ° 3: 0x3635bd16 AudioToolbox`MPEGAudioFile :: ParseID3Tags () + 58 image n ° 4: 0x3635b9aa AudioToolbox`MPEGAudioFile :: ParseAudioFile () + 26 frame # 5: 0x3631723e AudioToolbox`AudioFileObject :: DoOpenWithCallbacks (void *, long (*) (void *, long long, unsigned long, void *, unsigned long *), long (*) (void *, long long, unsigned long , void const *, unsigned long *), long long (*) (void *), long (*) (void *, long long)) + 166 image n ° 6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612 image n ° 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 que le point d'arrêt pour les exceptions Objective-C, le problème disparaît. Mais cela ne résout pas le problème que l'allocation d'AVAudioPlayer lève une exception C ++.
la source
Réponses:
Ajoutez votre point d'arrêt d'exception et modifiez le type d'exception de "Tous" à "Exceptions Objective-C"
Certaines classes d'AudioToolbox lancent des exceptions C ++ régulières. Vous pouvez les filtrer de cette façon.
la source
AVAudioPlayer
ne devrait pas lancer d'exceptions aléatoires.AVAudioPlayer et AVAudioRecorder lancent tous deux des exceptions, plusieurs d'entre elles. Celles-ci sont gérées 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: Tout, Pause: Au lancer), vous attraperez ces exceptions. Si vous continuez l'exécution sur ces derniers, l'application continuera à fonctionner normalement et ne plantera pas du tout.
La seule solution que j'ai trouvée jusqu'à présent 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 l'exécutant avec lui désactivé.Quand / si l'application plante un jour avec une exception levée, je cmd-6, j'active ce point d'arrêt, et je réexécute et fais ce que j'ai fait quand il s'est écrasé.Edit: mettre sur "exceptions Objective-C" est évidemment comment le faire. Voir la réponse ci-dessus!
la source
Voici une capture d'écran montrant comment j'ai corrigé cette erreur. Je ne sais pas si c'est la même manière dont les réponses ci-dessus parlent, mais je suppose que c'est similaire.
Exception
deAll
àObjective-C
.la source
La trace a beaucoup aidé, merci !. Nous avions commencé à rencontrer le même problème récemment. Il s'avère que les fichiers mp3 sur lesquels il était lancé n'avaient pas de balise ID3 valide et les exécuter via une application telle que Tagr les a corrigés!
la source
Dans Xcode 9.2, vous pouvez désactiver des exceptions spécifiques après les avoir vues. Ouvrez le menu des points d'arrêt et cliquez pour désactiver (flèche estompée)
la source
Essayez de définir AVAudioPlayer comme variable de classe!
la source