2010-08-21 10 views
10

मैं आईपॉड प्लेयर नियंत्रक के लिए एक संगीत प्लेयर प्रॉपर्टी का उपयोग कर रहा हूं।MPMusicPlayerController: आईपॉड सूचनाएं भेजना बंद कर देता है, जब आईपॉड ऐप पृष्ठभूमि में समाप्त हो जाता है

// .h 
@property (nonatomic, retain) MPMusicPlayerController *ipodPlayer; 

// .m 
ipodPlayer = [MPMusicPlayerController iPodMusicPlayer]; 

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

[notificationCenter addObserver:self selector:@selector(changedPlaybackState:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:ipodPlayer]; 
[notificationCenter addObserver:self selector:@selector(changedNowPlayingItem:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:ipodPlayer]; 

[ipodPlayer beginGeneratingPlaybackNotifications]; 

पृष्ठभूमि प्रोसेसिंग के दौरान, अगर आइपॉड प्लेयर एप्लिकेशन समाप्त होता है, सांत्वना प्रिंट आउट:

MediaPlayer: Message playbackState timed out. 

यदि यह दुर्घटना नहीं करता है (या फ्रीज़, प्रदर्शन धीमा), सूचना भेजी नहीं की जा रही है अब मेरी निगरानी विधियों के लिए। मैं अभी भी तरह संदेश भेज सकते हैं:

[ipodPlayer pause]; 
[ipodPlayer play]; 
[ipodPlayer skipToNextItem]; 
[ipodPlayer skipToPreviousItem]; 

लेकिन किसी भी सूचना को

मेरे सवालों का प्राप्त नहीं कर सकते हैं:

  1. वहाँ, पुन: असाइन करने के लिए रास्ता जाता है रनटाइम के दौरान संकेत फिर से लोड है? मैं संपत्ति को होने के लिए कैसे पुनर्स्थापित कर सकता हूं जैसे कि इसे पहली बार लॉन्च किया गया हो?
  2. मैं मैसेज को कैसे पकड़ सकता हूं: "मीडियाप्लेयर: संदेश प्लेबैकस्टेट टाइम आउट हो गया।" कंसोल आउटपुट में? यह एनएसएलओजी का उपयोग करने जैसा नहीं है।

मेरी मदद करने के लिए धन्यवाद।

UPDATED: यह assign या weak समाधान का उपयोग कर ipodPlayer संपत्ति के लिए किया गया था की तरह लगता है। इसके अलावा, इसे प्राप्त करने के साथ यह माना जाता है कि संपत्ति वहां नहीं हो सकती है। मेरे परीक्षण में वास्तव में इसका उपयोग करने के कई परीक्षणों और एक वर्ष के बाद, मुझे लगता है कि यह सही समाधान था।

+0

क्या आप आईओएस 5 का उपयोग कर रहे हैं? यदि नहीं, तो आपको यह करना चाहिए: self.ipodPlayer = [MPMusicPlayerController ...] अन्यथा सिद्धांत में आईपॉड म्यूजिकप्लेयर द्वारा बनाई गई घटना एकत्र की जाएगी और आपने रेफ गिनती नहीं बढ़ाई है ताकि आपको एक शून्य सूचक मिले किन्हीं बिंदुओं पर। यह तब तक है जब तक कि आप संगीत प्लेयर के साथ हर बातचीत से पहले उस विधि को कॉल न करें, जो आपकी समस्याओं का एक और कारण हो सकता है। एक उदाहरण इकट्ठा हो जाता है और आप खुद को नए उदाहरण से संलग्न नहीं करते हैं? – hktegner

+0

इस पुरानी पोस्ट पर टिप्पणी करने के लिए धन्यवाद। मैंने अपनी अनुपस्थिति की संभावना के साथ इस आईपॉडप्लेयर संपत्ति तक पहुंचने का अपना प्रवाह बदल दिया था। इसलिए, मैंने संपत्ति को 'असाइन' या 'कमजोर' का उपयोग करने के लिए बनाया और इसे '[एमपीएम्यूजिकप्लेयर कंट्रोलर आईपॉड म्यूजिकप्लेयर] के साथ शुरू किया;' जब भी यह नहीं है – petershine

उत्तर

1

मुझे आईओएस 5 में मेरे MpMoviePlayerController के साथ एक ही समस्या थी। मुझे एक फिक्स मिला जिसने इसका ख्याल रखा। यह यहां भी काम कर सकता है।

जोड़ें:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

viewDidLoad में।

मेरा अन्य post

+0

इस पुरानी पोस्ट का जवाब देने के लिए धन्यवाद। चूंकि मैं 'AVAudioPlayer' का उपयोग नहीं कर रहा हूं, मुझे नहीं पता कि यह मेरे लिए सही समाधान है या नहीं। इसके बजाए, मैंने आईपॉडप्लेयर संपत्ति के लिए कमजोर असाइनमेंट का उपयोग करना सुनिश्चित किया और कभी भी इसका उपयोग करने के बाद से, दुर्घटना की घटना लगभग किसी के लिए नहीं होती है। मान लीजिए कि किसी ऑब्जेक्ट को संदर्भित करने के साथ ऐसा करना है जो मेरे स्वामित्व में नहीं है। फिर भी धन्यवाद – petershine

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