मैं 4.3.2, 5.0, और 5.1 सिमुलेटर में एक आईओएस प्रोग्राम चला रहा हूं, और मैं ऑडियोटूलबॉक्स में एक अजीब आंतरिक अपवाद मार रहा हूं। मैं एक ब्रेकपाइंट Xcode में सेट है (Xcode 4.3.1, 10.7.3 पर चल रहा है) सभी अपवादों के लिए, और डीबगर AudioServicesCreateSystemSoundID()
करने के लिए एक कॉल के दौरान टूट रहा है:AudioServicesCreateSystemSoundID आंतरिक रूप से अपवाद क्यों फेंकता है लेकिन 0 को त्रुटि कोड के रूप में वापस करता है?
SystemSoundID soundID;
OSStatus errorCode = AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
//^boom.^
पश्व-अनुरेखन:
(lldb) bt
* thread #1: tid = 0x1f03, 0x9000e230 libc++abi.dylib`__cxa_throw, stop reason = breakpoint 1.2
frame #0: 0x9000e230 libc++abi.dylib`__cxa_throw
frame #1: 0x00144193 AudioToolbox`ID3ParserHandle::ID3ParserHandle(void*, long (*)(void*, unsigned long, unsigned long, unsigned long, void**, unsigned long*)) + 259
frame #2: 0x001442de AudioToolbox`ID3ParserOpen + 62
frame #3: 0x0006c0e7 AudioToolbox`MPEGAudioFile::ParseID3Tags() + 87
frame #4: 0x0006c2ba AudioToolbox`MPEGAudioFile::ParseAudioFile() + 26
frame #5: 0x00015153 AudioToolbox`AudioFileOpenWithCallbacks + 371
frame #6: 0x00027020 AudioToolbox`_ZL15VerifyAndMapURLPK7__CFURLRx + 448
frame #7: 0x00026d85 AudioToolbox`_ZL18ActionDataToServerPK7__CFURLm + 933
frame #8: 0x000da26b AudioToolbox`AudioServicesCreateSystemSoundID + 235
frame #9: 0x00005be1 app`-[SoundsViewController playSoundForPath:] + 257 at SoundsViewController.m:161
frame #10: 0x00005a99 app`-[SoundsViewController tableView:didSelectRowAtIndexPath:] + 777 at SoundsViewController.m:129
frame #11: 0x0029db68 UIKit`-[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
frame #12: 0x00293b05 UIKit`-[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219
frame #13: 0x009ad79e Foundation`__NSFireDelayedPerform + 441
frame #14: 0x00fb58c3 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
frame #15: 0x00fb6e74 CoreFoundation`__CFRunLoopDoTimer + 1220
frame #16: 0x00f132c9 CoreFoundation`__CFRunLoopRun + 1817
frame #17: 0x00f12840 CoreFoundation`CFRunLoopRunSpecific + 208
frame #18: 0x00f12761 CoreFoundation`CFRunLoopRunInMode + 97
frame #19: 0x01f6b1c4 GraphicsServices`GSEventRunModal + 217
frame #20: 0x01f6b289 GraphicsServices`GSEventRun + 115
frame #21: 0x00234c93 UIKit`UIApplicationMain + 1160
frame #22: 0x00002c45 app`main + 181 at main.m:14
हालांकि, soundID
में ऑडियो फ़ाइल सफलतापूर्वक बनाया गया है, और OSStatus त्रुटि कोड है कि AudioServicesCreateSystemSoundID
रिटर्न 0.
यह तीनों आईओएस सिम्युलेटर संस्करणों मैं स्थापित किया है में होता है, और मेरे iPhone पर 5.1 चल रहा है।
यह AVAudioPlayer throws breakpoint in debug mode के समान सामान्य बैकट्रैक जैसा दिखता है, हालांकि मेरा ऑडियोटूलबॉक्स के अधिक प्रत्यक्ष आमंत्रण का परिणाम है।
मैं इसे ऐप्पल के साथ फाइल करना चाहता हूं, क्योंकि यह ऑडियोटूलबॉक्स में एक बग है (ढांचे को फ्लो कंट्रोल, प्रति बीबीम और अन्य के लिए अपवादों का उपयोग नहीं करना चाहिए), लेकिन इससे पहले कि मैं सोच रहा हूं कि मैं कौन सी जानकारी एकत्र कर सकता हूं उन्हें देने के लिए, और यदि इस फेंक से बचने के लिए कोई तरीका है (शायद इस एमपी 3 में आईडी 3 टैग्स को ट्वीव करके?)
मुझे ऑडियोटूलबॉक्स की ExtAudioFileSetProperty विधि में भी एक अपवाद फेंक दिया गया है। दुर्भाग्यवश, अपवादों से बचने के लिए मुझे कोई रास्ता नहीं मिला है। –
हाँ, ऐसा लगता है कि वे नियंत्रण प्रवाह के लिए आंतरिक रूप से अपवादों का एक टन उपयोग कर रहे हैं। सबसे अच्छा समाधान मैन्युअल रूप से ब्रेकपॉइंट के रूप में सभी अपवाद फेंकना नहीं है, और इसके बजाय इसके "अपवाद ब्रेकपॉइंट" ब्रेकपॉइंट का उपयोग करना है। – cbowns
यह सिम्युलेटर की एक बग प्रतीत होता है। जब मैं अपने आईफोन पर ऐप चलाता हूं, तो यह क्रैश नहीं होता है। – 0xa6a