2013-03-13 7 views
21

एक कार्यरत अनुप्रयोग में ध्वनि जोड़ने के लिए AVAudioPlayer का उपयोग करके, यह तैयार करने के लिए तैयार/लटकता है। ध्यान दें कि यह भी खेल पर रोकता है/लटकता है। "प्रोग्राम निष्पादन जारी रखें" मारना कई बार एप्लिकेशन को फिर से शुरू करता है। यह समस्या केवल सिम्युलेटर में प्रोग्राम चलाते समय होती है।एक्सकोड तैयार करने पर रोकता है टॉप्ले

Xcode 4,6

कोड स्निपेट का उपयोग करना:

ViewController.h

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

@interface ViewController : UIViewController <AVAudioPlayerDelegate> 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 
{ 
} 

@property (nonatomic, strong) AVAudioPlayer *audioPlayer; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self initilizeAudio]; 
} 

- (void)initilizeAudio 
{ 
    NSError *error = nil; 
    NSURL *audioURL = [[NSBundle mainBundle] URLForResource:@"Background" withExtension:@"mp3"]; 

    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error]; 
    if (error) 
    { 
     NSLog(@"Error in audioPlayer: %@", [error localizedDescription]); 
    } 
    else 
    { 
     [self.audioPlayer setDelegate:self]; 
     [self.audioPlayer prepareToPlay]; 
    } 
} 

@end 

स्टैक ट्रेस

0 __cxa_throw 
21 -[AVAudioPlayer prepareToPlay] 
22 -[ViewController viewDidLoad] 
. 
. 
. 
+5

स्पष्ट रूप से मुझे अभी तक अपने प्रश्नों का उत्तर देने की अनुमति नहीं है। तो एक टिप्पणी में जवाब प्रदान करते हैं। समस्या आम तौर पर "सभी अपवाद" पर सेट ब्रेकपॉइंट के साथ विकसित होती थी, और वास्तविक अपवाद फेंक दिया गया था __cxa_throw। जो सी ++ पुस्तकालयों में स्पष्ट रूप से सामने आता है जिनका उपयोग AVAudioPlayer को लागू करने के लिए किया जाता है। ब्रेकपॉइंट को "ऑल ऑब्जेक्टिव-सी अपवाद" में बदलकर कार्यक्रम ठीक चला गया। (यह ब्रेकपॉइंट को संपादित करके और अपवाद फ़ील्ड को ऑब्जेक्टिव-सी में बदलकर किया जा सकता है।) – zermat

+1

[मेटा पर यह पोस्ट] के अनुसार (http://meta.stackexchange.com/a/17467) आपको 8 के लिए इंतजार करना होगा घंटों यदि आपके पास कम से कम 100 प्रतिनिधि हैं। आप 48 घंटे बाद अपना जवाब स्वीकार कर सकते हैं। – Sebastian

उत्तर

66

समस्या सामान्य रूप से "सभी अपवाद" पर सेट ब्रेकपॉइंट के साथ विकसित होती थी, और वास्तविक अपवाद फेंक दिया गया था __cxa_throw। जो सी ++ पुस्तकालयों में स्पष्ट रूप से सामने आता है जिनका उपयोग AVAudioPlayer को लागू करने के लिए किया जाता है। ब्रेकपॉइंट को "ऑल ऑब्जेक्टिव-सी अपवाद" में बदलकर कार्यक्रम ठीक चला गया। (यह ब्रेकप्वाइंट संपादन और ऑब्जेक्टिव-सी के अपवाद क्षेत्र बदलकर किया जा सकता है।

+1

बहुत बढ़िया, मुझे खुशी है कि आपने इसे पोस्ट किया क्योंकि मैं इस पर अपना सिर खरोंच कर रहा था !!! – LilMoke

+1

आप महोदय, मेरे दिन बचाया! मैं आपको धन्यवाद नहीं दे सकता! मुझे एक ही समस्या थी और यह मुझे पागल कर रहा था। :-) – thomas

+0

धन्यवाद! मेरी समस्या भी हल हो गई! – Marky

4

मैं भी इस समस्या थी। काम करता है इसके बाद के संस्करण समाधान है, लेकिन मुझे लगता है कि इसे ठीक करने के लिए एक बेहतर तरीका है।

त्रुटियों को अनदेखा करने वाले सुझावों से संकेत मिलता है कि मैक एक डिवाइस पर ऑडियो भेजने की कोशिश कर रहा है जो काम नहीं कर रहा है। मुझे लगता है कि कोड सी में लिखा गया है, इसलिए अपवादों को "उद्देश्य-सी केवल" में बदलना अपवाद को चुप करता है ।

असली ठीक ऑडियो फिर से काम उपकरण प्राप्त करने के लिए है। मेरे लिए, विफलता का कारण था कि मैं कुछ ऑडियो इनपुट और आउटपुट के आसपास स्विचन गया था, लेकिन (ऐसा लगता है) आईओएस सिम्युलेटर पुरानी सेटिंग याद किया था । तो जब मैं इस सूत्र में विभिन्न चरणों की कोशिश की:

Error '!dat' trying to set the (null) audio devices' sample rate

मैं फिर से काम करने के लिए ऑडियो मिला है, और यह किसी भी अपवाद फेंकने बंद कर दिया।

+0

समस्या नहीं है कि सिम्युलेटर पर कोई ऑडियो हार्डवेयर नहीं है और ऐसा लगता है कि यह मध्यवर्ती सी ++ अपवाद का कारण बनता है जिसे अनदेखा किया जाना चाहिए (स्वीकार्य उत्तर में मेरा तंत्र सुझाया गया है)। – Drux

संबंधित मुद्दे