10

iPod プレーヤー コントローラーのミュージック プレーヤー プロパティを使用しています。

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

バックグラウンド処理中に iPod プレーヤー アプリが終了すると、コンソールに次のように出力されます。

MediaPlayer: Message playbackState timed out.

クラッシュしない (またはフリーズしてパフォーマンスが低下する) 場合、通知は監視メソッドに送信されていません。次のようなメッセージを送信できます。

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

しかし、通知を受け取ることはできません

私の質問は次のとおりです。

  1. 実行時にポインタを再割り当て、リロードする方法はありますか? プロパティを最初に起動したときと同じように復元するにはどうすればよいですか?
  2. 「MediaPlayer: メッセージの再生状態がタイムアウトしました。」というメッセージをキャッチするにはどうすればよいですか。コンソール出力で?これは、NSLog の使用とは異なります。

助けてくれてありがとう。

更新:assign or weakfor ipodPlayer プロパティを 使用することが解決策だったようです。また、プロパティが存在しない可能性があるという前提でアクセスが行われます。多くの試行錯誤と 1 年間の実際のアプリでの使用を経て、これが正しい解決策だったと思います。

4

1 に答える 1

1

MpMoviePlayerControllerはiOS 5で同様の問題を抱えていました。それを処理する修正を見つけました。ここでも活躍するかもしれません。

追加:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

viewDidLoad

もっと私の他の投稿

于 2011-11-19T16:24:39.180 に答える