हर बार जब मैं इस ऐप को लोड करता हूं तो ऐसा लगता है जैसे मैंने इस लाइन पर एक ब्रेकपॉइंट सेट किया था:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
इस लाइन के ऊपर कोई भी ब्रेकपॉइंट या कोई जगह नहीं है। यह केवल तब होता है जब मैं ऐप को डिबग मोड में चलाता हूं और ब्रेकपॉइंट के बाद कुछ भी क्रैश नहीं होता है। जब मैं "प्रोग्राम निष्पादन जारी रखें" पर क्लिक करता हूं, तो एप्लिकेशन कुछ भी नहीं होता है।
यह लोडडेटा विधि है, जिसे इसके साथ बुलाया जाता है initWithData
:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
लोडडाटा फ़ंक्शन ठीक काम कर रहा है। अनुरोधित एमपी 3 फ़ाइल को लोड किया गया और ब्रेकपॉइंट के बाद किसी भी समस्या के बिना खेला गया।
क्या आपके पास कोई विचार है जो मैं गलत कर रहा हूं?
संपादित करें: जब यह ब्रेकपॉइंट पर रुकता है तो मैंने एक बैकट्रेस चलाया। यह आउटपुट था:
(lldb) बी.टी. * धागा # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, रोक कारण = विराम 1.2 फ्रेम # 0: 0x30df1724 libc ++ abi.dylib`__cxa_throw फ्रेम # 1: 0x36403a24 AudioToolbox`ID3ParserHandle :: ID3ParserHandle (void *, long (*) (void *), अहस्ताक्षरित लंबा, अहस्ताक्षरित लंबा, बिना लिखा लंबा, void **, अहस्ताक्षरित लंबा *)) + 452 फ्रेम # 2: 0x36403b0e AudioToolbox`ID3ParserOpen + 142 फ़्रेम # 3: 0x3635bd16 AudioToolbox`MPEGAudioFile :: ParseID3Tags () 58 फ़्रेम # 4: 0x3635b9aa AudioToolbox`MPEGAudioFile :: ParseAudioFile () 26 फ्रेम # 5: 0x3631723e AudioToolbox`AudioFileObject :: DoOpenWithCallbacks (void *, long (*) (void *, long long, unsigned long, void *, unsigned long *), long (*) (void *), long long, unsign long , void const *, unsign long *), लॉन्ग लॉन्ग (*) (void *), long (*) (void *, long long)) + 166 फ़्रेम # 6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612 फ्रेम # 7: 0x31f4c1ec AVFoundation`- [AVAudioPlayer initWithData: error:] + 120
"समाधान": यह पता चला है, अगर मैं सभी अपवादों के अपवाद अपवाद को अक्षम करता हूं और केवल उद्देश्य-सी अपवादों के लिए ब्रेकपॉइंट का उपयोग करता है तो समस्या गायब हो जाती है। लेकिन यह इस समस्या को हल नहीं करता है कि AVAudioPlayer का आवंटन C ++ अपवाद फेंकता है।