2011-03-18 9 views
10

पर प्लेबैक विफल होने पर त्रुटि विवरण कैसे प्राप्त करें यदि वीडियो-प्ले विफल रहता है तो मैं UIAlert दिखाना चाहता हूं। तो मैं अपने मूवी प्लेयर के लिए MPMoviePlayerPlaybackDidFinishNotification पंजीकृत:MPMoviePlayerController

[[NSNotificationCenter defaultCenter] addObserver: स्वयं चयनकर्ता: @selector (myMovieFinishedCallback :) नाम: MPMoviePlayerPlaybackDidFinishNotification वस्तु: self.moviePlayer];

मेरे myMovieFinishedCallback में: मैं जांचता हूं कि उपयोगकर्ता जानकारी शब्दकोश में error नामक ऑब्जेक्ट है या नहीं। मेरे वास्तविक डिवाइस पर मुझे यह त्रुटि नहीं मिली है (नेटवर्क त्रुटि के बिना, फ़ाइल के लिए 404 त्रुटि)। आईफोन सिम्युलेटर पर मुझे त्रुटि मिलती है।

मुझे MPMoviePlayerPlaybackDidFinishNotification प्राप्त होने पर तर्क को सही ढंग से कैसे जांच सकता है?

उत्तर

18

दुर्भाग्यवश, MPMoviePlayerController (जब तक आईओएस 4.3 सहित नहीं) तक दस्तावेज़ों से उपलब्ध समस्याओं से कोई वर्बोज़ पहचान नहीं है। यह MPMoviePlayerPlaybackDidFinishNotification के UserInfo के भीतर किसी भी समस्या के मामले में MPMovieFinishReasonPlaybackError देता है।

आईओएस 4.3 के साथ हमें अंत में errorLog और accessLog गुणों को विस्तारित और बहुत उपयोगी जानकारी मिली। MPMoviePlayerController Reference देखें।

आईओएस 5.0 के साथ एक error कुंजी उस अधिसूचना के साथ आती है जिसमें डिवाइस पर भी निर्माण होता है न कि केवल सिम्युलेटर के भीतर। errorNSError का एक उदाहरण है और बहुत उपयोगी जानकारी प्रदान करता है। दुर्भाग्य से ऐप्पल द्वारा दस्तावेज नहीं किया गया है, इसलिए यह आईओएस की किसी भी रिलीज में बदल सकता है। इसके अतिरिक्त, दिए गए त्रुटि-कोड पर कोई स्पष्टीकरण नहीं है। उदाहरण के लिए एक HTTP-Status: 404 परिणामस्वरूप त्रुटि उदाहरण के भीतर त्रुटि-कोड -1100 का परिणाम देगा। हालांकि, यह एक उदाहरण होगा कि इस अधिसूचना को सबसे उचित तरीके से कैसे संभाला जाए।

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handleMPMoviePlayerPlaybackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:nil]; 

कि एक उचित अधिसूचना हैंडलर होगा:

- (void)handleMPMoviePlayerPlaybackDidFinish:(NSNotification *)notification 
{ 
    NSDictionary *notificationUserInfo = [notification userInfo]; 
    NSNumber *resultValue = [notificationUserInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey]; 
    MPMovieFinishReason reason = [resultValue intValue]; 
    if (reason == MPMovieFinishReasonPlaybackError) 
    { 
     NSError *mediaPlayerError = [notificationUserInfo objectForKey:@"error"]; 
     if (mediaPlayerError) 
     { 
      NSLog(@"playback failed with error description: %@", [mediaPlayerError localizedDescription]); 
     } 
     else 
     { 
      NSLog(@"playback failed without any given reason"); 
     } 
    } 
} 

अंतिम लेकिन कम से कम, मत भूलना नहीं डिफ़ॉल्ट के केंद्र से कि अधिसूचना हैंडलर दूर करने के लिए जब वस्तु आप इसे संभाल रहे हैं के उदाहरण को रिहा भीतर।

[[NSNotificationCenter defaultCenter] removeObserver:self 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:nil]; 
+0

यह बहुत ही दयालु है, लेकिन ऐसा लगता है कि यह टूट गया है। आईओएस 8.1 और मेरे MPMoviePlayer.url का उपयोग 404 त्रुटि प्राप्त हो रहा है, लेकिन यह [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (playbackDidFinish :) नाम: MPMoviePlayerPlaybackDidFinishNotification ऑब्जेक्ट: nil]; – Lombas

+1

यह देखते हुए कि ऐप्पल ने MPMoviePlayer को बहिष्कृत कर दिया है, मुझे लगता है कि इसके बजाय AVFoundation का उपयोग करने के लिए यह एक अधिक सुरक्षित शर्त है। – Till

0

आप userinfo शब्दकोश के MPMoviePlayerPlaybackDidFinishReasonUserInfoKey पीछे मूल्य देख सकते हैं। यदि मान MPMovieFinishReasonPlaybackError है, तो आप मान सकते हैं कि कुछ सामान गलत हो गए हैं। यह विधि सुंदर डर्न भरोसेमंद है।

2

मुझे एक ही समस्या थी। althought मैं MPMoviePlayerLoadStateDidChangeNotification कॉलबैक फ़ंक्शन पंजीकृत कर रहा था और userInfo चर से त्रुटि प्राप्त कर रहा था, यह त्रुटि नहीं दिखा रहा था। मैंने फ़ोरम के माध्यम से बहुत समय बिताया और कोड के साथ खेलने के बाद मुझे एहसास हुआ कि समस्या क्या थी।

सबसे पहले आप कॉलबैक फ़ंक्शन रजिस्टर करने की आवश्यकता:

// Register that the did finish notification (movie stopped) 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer]; 

MovieFinished कॉलबैक फ़ंक्शन के भीतर आप की आवश्यकता होगी:

NSDictionary *notice = [paramNotification userInfo]; 

if (notice != nil) 
{ 
    NSError *errorInfo = [notice objectForKey:@"error"]; 

    if (errorInfo != nil) { 
     UIAlertView *notice = [[UIAlertView alloc] initWithTitle:@"Error" message:[errorInfo localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [notice show]; 
     [notice release];    
    } 
} 

इस कोड moviecontroller से संबंधित किसी भी त्रुटि दिखाई देगा। तो .. मेरे कोड में समस्या क्या थी? .. मैं गलत जगहों पर [moviecontroller play] विधि का उपयोग कर रहा था, इसलिए इसे जांचें।

शुभकामनाएं!

+0

धन्यवाद, मैंने इस स्निपेट के साथ त्रुटि संदेश देखा। –

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