Setiap kali saya memuat aplikasi itu berhenti seolah-olah saya telah menetapkan breakpoint pada baris ini:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
Tidak ada breakpoint di atas atau di mana pun di dekat garis ini. Itu hanya terjadi ketika saya menjalankan aplikasi dalam mode debug dan tidak ada yang mogok setelah breakpoint. Aplikasi ini berfungsi karena tidak ada yang terjadi saat saya mengklik "Lanjutkan eksekusi program".
Ini adalah metode loadData, yang dipanggil dengan initWithData
:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
Fungsi loadData tampaknya berfungsi dengan baik. File mp3 yang diminta dimuat dan diputar tanpa masalah setelah breakpoint.
Apakah Anda tahu apa yang saya lakukan salah?
EDIT: Saya menjalankan backtrace ketika berhenti di breakpoint. Ini adalah hasilnya:
(lldb) bt * utas # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, alasan berhenti = breakpoint 1.2 bingkai # 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 bingkai # 2: 0x36403b0e AudioToolbox`ID3ParserOpen + 142 bingkai # 3: 0x3635bd16 AudioToolbox`MPEGAudioFile :: ParseID3Tags () + 58 bingkai # 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 bingkai # 6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612 bingkai # 7: 0x31f4c1ec AVFoundation`- [AVAudioPlayer initWithData: error:] + 120
"SOLUSI": Ternyata, jika saya menonaktifkan breakpoint pengecualian untuk semua pengecualian dan hanya menggunakan breakpoint untuk pengecualian Objective-C, masalahnya akan hilang. Tapi itu tidak menyelesaikan masalah alokasi AVAudioPlayer memunculkan pengecualian C ++.
sumber
Jawaban:
Tambahkan breakpoint pengecualian Anda dan edit jenis pengecualian dari "Semua" menjadi "pengecualian Objective-C"
Beberapa kelas di AudioToolbox menampilkan pengecualian C ++ biasa. Anda dapat memfilternya dengan cara ini.
sumber
AVAudioPlayer
seharusnya tidak membuang pengecualian acak.AVAudioPlayer dan AVAudioRecorder keduanya akan menampilkan pengecualian, beberapa di antaranya. Ini ditangani secara internal oleh para pemain tetapi jika Anda memiliki breakpoint untuk "Semua Breakpoints" (yaitu Pengecualian: Semua, Istirahat: Saat Lempar) Anda akan menangkap pengecualian ini. Jika Anda melanjutkan eksekusi ini, aplikasi akan terus berjalan normal dan tidak macet sama sekali.
Satu-satunya solusi yang saya dapatkan sejauh ini adalah mengklik bilah breakpoint di Breakpoint Navigator, menonaktifkan breakpoint khusus ini, dan menjalankannya dengan nonaktif.Ketika / jika aplikasi pernah crash dengan pengecualian yang dilempar, saya cmd-6, mengaktifkan breakpoint itu, dan menjalankan kembali dan melakukan apa pun yang saya lakukan saat crash.Edit: pengaturan ke "pengecualian Objective-C" jelas bagaimana melakukannya. Lihat jawaban di atas!
sumber
Berikut tangkapan layar yang menunjukkan bagaimana saya memperbaiki kesalahan ini. Saya tidak yakin apakah ini adalah cara yang sama yang dibicarakan oleh jawaban di atas, tetapi saya menganggapnya serupa.
Exception
dariAll
menjadiObjective-C
.sumber
Backtrace banyak membantu, terima kasih !. Kami mulai mengalami masalah yang sama baru-baru ini. Ternyata file mp3 yang dilempar tidak memiliki tag ID3 yang valid dan menjalankannya melalui aplikasi seperti Tagr memperbaikinya!
sumber
Di Xcode 9.2 Anda dapat menonaktifkan pengecualian tertentu setelah Anda melihatnya. Buka menu breakpoints dan klik untuk menonaktifkan (panah pudar)
sumber
Coba atur AVAudioPlayer sebagai Variabel kelas!
sumber