バックグラウンドで音楽を再生できる音楽プレーヤーアプリケーションを開発しています。音楽が再生されている限り、アプリケーションは終了しませんが、再生が停止され、アプリケーションがバックグラウンドにある場合は、アプリケーションが終了する可能性があります。アプリケーションをよりユーザーフレンドリーにするために、再生キューと、アプリがシステムによって終了されるときの状態を保存したいので、アプリデリゲートに次の行を実装しました。
- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
/*
Archive the current queue controller to be able to continue the playback like the app never has been terminated
when user is launching it again.
*/
SMKQueueController *queueController = [[UIApplication sharedApplication] queueController];
[coder encodeObject:queueController forKey:@"queueController"];
return YES;
}
- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
/*
Restore the recently used queue controller to be able to continue the playback like the app never has been
terminated when use is launching it again.
*/
SMKQueueController *queueController = [coder decodeObjectForKey:@"queueController"];
[[UIApplication sharedApplication] setQueueController:queueController];
return YES;
}
時々(特にダブルタップホームボタンメニューを介して手動で強制終了した場合)、期待どおりに機能することがあります。ただし、アプリケーションの終了時にこのメソッドが呼び出されない場合があります。
だから私の質問は:私はメソッドがどのように機能するのか、またはそれらが何のためにあるのかを誤解しましたか?または、そのような機能を実装するためのより良い場所はありますか?