2010-08-21 36 views
10

Tôi đang sử dụng thuộc tính trình phát nhạc cho trình điều khiển trình phát iPod.MPMusicPlayerController: iPod dừng gửi thông báo, khi ứng dụng iPod bị chấm dứt ở chế độ nền

// .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]; 

Trong xử lý nền, nếu iPod ứng dụng máy nghe nhạc bị chấm dứt, giao diện điều khiển in ra:

MediaPlayer: Message playbackState timed out. 

Nếu nó không sụp đổ (hoặc đóng băng, hiệu suất chậm), thông báo không được gửi với các phương pháp quan sát của tôi nữa. Tôi vẫn có thể gửi tin nhắn như:

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

nhưng không thể nhận được bất kỳ thông báo

Câu hỏi của tôi là:

  1. Có được cách để phân công lại, tải lại con trỏ trong thời gian chạy? Làm cách nào để khôi phục thuộc tính là giống như khi được khởi chạy lần đầu tiên?
  2. Làm cách nào để tôi có thể bắt gặp sự cố: "MediaPlayer: Phát lại tin nhắnĐã hết thời gian chờ". trong đầu ra console? Điều này không giống như sử dụng NSLog.

Cảm ơn bạn đã trợ giúp tôi.

CẬP NHẬT: Nó có vẻ như sử dụng assign hoặc weak cho tài sản ipodPlayer được giải pháp. Ngoài ra, truy cập nó được thực hiện với giả định rằng tài sản có thể không có. Sau nhiều thử nghiệm và một năm thực sự sử dụng nó trong ứng dụng của tôi, tôi nghĩ rằng đây là giải pháp đúng.

+0

Bạn đang sử dụng iOS 5? Nếu không, thì bạn nên làm: self.ipodPlayer = [MPMusicPlayerController ...] Nếu không, trong lý thuyết trường hợp được tạo bởi iPodMusicPlayer sẽ được thu thập và bạn chưa tăng số đếm để bạn sẽ nhận được con trỏ rỗng tại một số điểm. Đó là trừ khi bạn gọi phương thức đó trước mọi tương tác với trình phát nhạc, đó có thể là một lý do khác cho vấn đề của bạn. Một ví dụ được thu thập và bạn không đính kèm bản thân vào cá thể mới? – hktegner

+0

Cảm ơn bạn đã bình luận bài đăng cũ này. Tôi đã thay đổi dòng chảy của tôi truy cập vào tài sản ipodPlayer này với khả năng vắng mặt của nó. Vì vậy, tôi đã làm cho thuộc tính sử dụng 'assign' hoặc' weak' và khởi tạo nó với '[MPMusicPlayerController iPodMusicPlayer];' bất cứ khi nào nó không có ở đó – petershine

Trả lời

1

Tôi gặp vấn đề tương tự với số MpMoviePlayerController trong iOS 5. Tôi tìm thấy bản sửa lỗi đã xử lý vấn đề đó. Nó cũng có thể hoạt động ở đây.

Add:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

trong viewDidLoad.

Thêm khác của tôi post

+0

Cảm ơn bạn đã trả lời bài đăng cũ này. Vì tôi không sử dụng 'AVAudioPlayer', tôi không biết đây có phải là giải pháp phù hợp với tôi hay không. Thay vào đó, tôi đã chắc chắn sử dụng gán yếu cho tài sản iPodPlayer và kể từ khi sử dụng nó như thế này, sự xuất hiện của vụ tai nạn không xảy ra gần như không có. Đoán nó phải làm với việc tham chiếu một vật không thuộc sở hữu của tôi. Dù sao cũng cảm ơn bạn – petershine

Các vấn đề liên quan