Mỗi khi tôi tải ứng dụng, nó sẽ dừng lại như thể tôi đã đặt một điểm ngắt trên dòng này:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
Không có điểm dừng ở trên hoặc bất kỳ nơi nào gần đường này. Nó chỉ xảy ra khi tôi chạy ứng dụng ở chế độ gỡ lỗi và không có gì bị lỗi sau điểm ngắt. Ứng dụng hoạt động như không có gì xảy ra khi tôi nhấp vào "Tiếp tục thực hiện chương trình".
Đây là phương thức loadData, được gọi với initWithData
:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
Hàm loadData dường như đang hoạt động tốt. Tệp mp3 được yêu cầu được tải và phát mà không gặp bất kỳ sự cố nào sau điểm ngắt.
Bạn có biết tôi đang làm gì sai không?
CHỈNH SỬA: Tôi đã chạy một dấu lùi khi nó dừng lại ở điểm ngắt. Đây là đầu ra:
(lldb) bt * chủ đề # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, stop reason = breakpoint 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: error:] + 120
"GIẢI PHÁP": Hóa ra, nếu tôi vô hiệu hóa điểm ngắt ngoại lệ cho tất cả các ngoại lệ và chỉ sử dụng điểm ngắt cho các ngoại lệ Objective-C, vấn đề sẽ biến mất. Nhưng nó không giải quyết được vấn đề là việc cấp phát AVAudioPlayer ném một ngoại lệ C ++.