Jedes Mal, wenn ich die App lade, stoppt sie, als hätte ich einen Haltepunkt in dieser Zeile festgelegt:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
Es gibt keinen Haltepunkt über oder irgendwo in der Nähe dieser Linie. Es passiert nur, wenn ich die App im Debug-Modus starte und nach dem Haltepunkt nichts abstürzt. Die App funktioniert so, als wäre nichts passiert, wenn ich auf "Programmausführung fortsetzen" klicke.
Dies ist die loadData-Methode, die aufgerufen wird mit initWithData
:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
Die loadData-Funktion scheint einwandfrei zu funktionieren. Die angeforderte MP3-Datei wird nach dem Haltepunkt problemlos geladen und wiedergegeben.
Hast du eine Ahnung, was ich falsch mache?
EDIT: Ich habe eine Rückverfolgung ausgeführt, als sie am Haltepunkt stoppt. Dies war die Ausgabe:
(lldb) bt * Thread # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, Stoppgrund = Haltepunkt 1.2 Frame # 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 Frame # 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 (*) (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 Frame # 6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612 Frame # 7: 0x31f4c1ec AVFoundation`- [AVAudioPlayer initWithData: Fehler:] + 120
"LÖSUNG": Es stellt sich heraus, dass das Problem verschwindet, wenn ich den Ausnahme-Haltepunkt für alle Ausnahmen deaktiviere und den Haltepunkt nur für Objective-C-Ausnahmen verwende. Das Problem, dass die Zuweisung von AVAudioPlayer eine C ++ - Ausnahme auslöst, wird dadurch jedoch nicht gelöst.
quelle
Antworten:
Fügen Sie Ihren Ausnahme-Haltepunkt hinzu und bearbeiten Sie den Ausnahmetyp von "Alle" zu "Objective-C-Ausnahmen".
Einige Klassen in AudioToolbox lösen reguläre C ++ - Ausnahmen aus. Sie können sie auf diese Weise herausfiltern.
quelle
AVAudioPlayer
sollte keine zufälligen Ausnahmen auslösen.AVAudioPlayer und AVAudioRecorder lösen beide Ausnahmen aus, einige davon. Diese werden intern von den Spielern behandelt, aber wenn Sie einen Haltepunkt für "Alle Haltepunkte" haben (dh Ausnahme: Alle, Unterbrechung: Beim Werfen), werden Sie diese Ausnahmen abfangen. Wenn Sie die Ausführung auf diesen fortsetzen, läuft die App normal weiter und stürzt überhaupt nicht ab.
Die einzige Lösung, die ich bisher gefunden habe, besteht darin, im Haltepunktnavigator auf die Haltepunktleiste zu klicken, diesen bestimmten Haltepunkt zu deaktivieren und ihn deaktiviert auszuführen.Wenn / falls die App jemals mit einer ausgelösten Ausnahme abstürzt, drücke ich cmd-6, aktiviere diesen Haltepunkt und führe erneut aus und mache alles, was ich getan habe, als sie abgestürzt ist.Bearbeiten: Die Einstellung auf "Objective-C-Ausnahmen" ist offensichtlich die Vorgehensweise. Siehe obige Antwort!
quelle
Hier ist ein Screenshot, der zeigt, wie ich diesen Fehler behoben habe. Ich bin mir nicht sicher, ob dies der gleiche Weg ist, über den die obigen Antworten sprechen, aber ich gehe davon aus, dass es ähnlich ist.
Exception
vonAll
nachObjective-C
.quelle
Die Rückverfolgung hat sehr geholfen, danke!. Wir hatten vor kurzem angefangen, auf dasselbe Problem zu stoßen. Es stellte sich heraus, dass die MP3-Dateien, auf die sie geworfen wurden, kein gültiges ID3-Tag hatten und sie über eine App wie Tagr ausgeführt wurden, um sie sofort zu reparieren !
quelle
In Xcode 9.2 können Sie bestimmte Ausnahmen deaktivieren, nachdem Sie sie gesehen haben. Öffnen Sie das Menü Haltepunkte und klicken Sie zum Deaktivieren (ausgeblendeter Pfeil).
quelle
Versuchen Sie, den AVAudioPlayer als Klassenvariable festzulegen!
quelle